泛型需要新的课程

时间:2015-12-03 08:13:25

标签: java generics

考虑下一个方法

<T, A extends BaseClass1, U extends BaseClass2<T, A>> 
void map(Class<T> classType, Class<U> myClass2Instance)

然后我得到了这个课程

class Child extends BaseClass2<ArrayList<MyData>, BaseClass1>

现在我正在尝试进行映射:

map(ArrayList<MyData>.class, Child.class)

诅咒它没有编译因为你不能拥有泛型类类型,所以我把它改成下一个语句:

Class<ArrayList<MyData>> classData = (Class<ArrayList<MyData>>) new ArrayList<MyData>().getClass();
map(classData, Child.class)

这引起了警告,但它确实有效。

有没有办法让它在没有新的类实例的情况下工作?我只是不喜欢这里的新关键字...

1 个答案:

答案 0 :(得分:0)

据我所知,如果没有未经检查的警告,您将无法获得Class<ArrayList<MyData>>类型的变量。

@SuppressWarnings({"unchecked", "rawtypes"})
Class<ArrayList<MyData>> classData = (Class<ArrayList<MyData>>) (Class) ArrayList.class;

请注意,由于类型删除,Class<ArrayList<MyData>>等于Class<ArrayList<AnyOtherData>>,因此无法在map函数中区分它们。