/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;
import java.lang.reflect.*;

abstract class Foo<T> {
    private final Class<T> clazz;

    public Foo(List<T> list) {
        this.clazz = (Class<T>) ((ParameterizedType) getClass()
                .getGenericSuperclass()).getActualTypeArguments()[0];
    }
    
    public Class<T> getClazz() {
    	return clazz;
    }
}

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	
	public static void main (String[] args) throws java.lang.Exception
	{
		Foo<Integer> x = new Foo<Integer>(new ArrayList<Integer>()){};
		System.out.printf("<T> is %s\n", x.getClazz());
		Foo<String> y = new Foo<String>(new ArrayList<String>()){};
		System.out.printf("<T> is %s\n", y.getClazz());
		// Erro em runtime, <T> é genérico
		// criaVersaoGenerica();
	}
	
	public static <K> void criaVersaoGenerica() {
		Foo<K> k = new Foo<K>(new ArrayList<K>()){};
	}
}