попробуй: Class<? extends Foo<?>> fooType = FooInt.class;
Еще один момент:
- Тип класса
Class
не class
(верхний регистр C
);
- вы не можете использовать примитивы в дженериках (используйте Integer вместо int)
Добавлено: и вот как это работает:
public class Foo<T> {
private T value;
public Foo(T value) {
this.value = value;
}
}
public class FooInt extends Foo<Integer>{
public FooInt(Integer value) {
super(value);
}
}
public class FooDouble extends Foo<Double>{
public FooDouble(Double value) {
super(value);
}
}
Фабрика (хотя бы одна строка, но много исключений ;-)):
import java.lang.reflect.InvocationTargetException;
public class Factory {
<P, T extends Foo<P>> T build(Class<T> clazz, P param)
throws IllegalArgumentException, SecurityException,
InstantiationException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException {
return clazz.getConstructor(param.getClass()).newInstance(param);
}
public static void main(String[] args)
throws IllegalArgumentException, SecurityException,
InstantiationException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException {
Factory f = new Factory();
System.out.println(f.build(FooInt.class, Integer.valueOf(1)));
System.out.println(f.build(FooDouble.class, Double.valueOf(1.1)));
}
}