在Java中查找实际类型参数

时间:2011-04-22 18:17:12

标签: java generics

我有一个班级

class ClassA<B extends ClassC>
{
................
}

在另一个班级,我有一个A类型的对象列表。

List<A<?>> cl = new ArrayList<A<?>>();
cl.add(new ClassB1(....));

其中ClassB1扩展了ClassC。如何找出列表中的对象类型?即列表中的第一个对象是ClassB1类型。

添加实际代码

ClassA<ClassB1> af = new ClassA<ClassB1>(); 
List<ClassA<?>> afl = new ArrayList<ClassA<?>>(); 
afl.add(af); 
for(ClassA<?> a: afl) 
    System.out.println(a.getClass());

这只打印ClassA而不打印ClassB1。

2 个答案:

答案 0 :(得分:3)

如果你真的,真的,你真的需要,你可以使用getClass()上课。

但是,我建议你重新考虑一下首先需要上课的概念。 如果您打算以不同的方式对待这些类,那么它可能不像您想象的那样通用。考虑重构更合适的方法。

答案 1 :(得分:2)

如果您放置不同类的对象,则可以迭代列表并使用getClass()

更新:由于类型擦除,此信息在运行时丢失。所以你无法得到它。