【问题标题】:Finding actual type parameters in Java在 Java 中查找实际的类型参数
【发布时间】:2011-04-23 03:03:18
【问题描述】:

我有课

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。

【问题讨论】:

    标签: java generics


    【解决方案1】:

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

    但是,我建议您重新考虑需要首先获得课程的概念。 如果您要以不同的方式对待这些类,它可能并不像您想象的那么通用。考虑重构为更合适的方法。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 与问题或答案无关,但由于 SO 没有 PM 机制...感谢 100k,Bozho! :-)
      • getClass() 只告诉我对象是 ClassC 类型的。
      • @athena - 你还需要知道什么?
      • 例如,第一个对象的类型为 ClassB1。
      • @arthena - 如果类是 ClassB1 类型,那么它将返回 CalssB1。也许您的问题出在其他地方。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 2014-04-18
      相关资源
      最近更新 更多