我有我的通用界面:
public interface myGenericInterface<T> {...}
我有一个以这种方式检索的课程:
Class<?> myClass = Class.forName("myClassName");
我希望能够实例化这样的东西:
myGenericInterface<myClass> mySubType ...
当然没有用。有没有办法做这样的事情?
更新:
好吧,因为泛型与编译时相关,我想它不适用于反射样式代码。因此,没有任何好处可以产生。
答案 0 :(得分:2)
泛型是一种编译时功能,有助于避免编程错误,因此您尝试做的事情毫无意义,抱歉。
答案 1 :(得分:1)
当您在类字段中使用泛型声明对象时,此类中的Field反射对象会保留声明的泛型类型。
static class ClassA {
public List<String> field = new ArrayList<String>();
}
public static void main(String[] args) throws Exception {
Field field = ClassA.class.getField("field");
Class<?> genericType = getGenericType(field);
System.out.println(genericType);
}
private static Class<?> getGenericType(Field field) {
final Type type0 = field.getGenericType();
if (type0 instanceof ParameterizedType) {
final Type type = ((ParameterizedType) type0).getActualTypeArguments()[0];
if (type instanceof Class<?>) {
return (Class<?>) type;
}
// miss code for method arguments
}
return Object.class;
}
代码打印class java.lang.String
并且在您的情况下可能很有用,但基本上原始的Class对象不带有泛型信息 - 因为泛型信息仅用于编译时而不是运行时。