找到通用对象的类

时间:2011-01-09 23:33:33

标签: java type-erasure

假设我有以下课程。

public class gen<T> {
   public gen(){
   }
   Class<T> class(){
      //something that figures out what T is.
   }
}

如何在不传递任何其他信息的情况下实现class()函数?

我所做的就是这里,但我必须将T的一个对象传递给对象gen。

public class gen<T> {
   public gen(){
   }
   Class<T> class(T var){
    return (Class<T>) var.getClass();
  }
}

3 个答案:

答案 0 :(得分:3)

您无法计算出T的运行时值。这是由于type erasure

答案 1 :(得分:3)

没有。由于类型擦除,类的编译版本的字节码不能保留足够的信息来确定T.传递T类型的实际对象所做的就是你能做的最好的事情。

答案 2 :(得分:1)

确实可以使用相当多的反射来做到这一点。这个链接:

http://www.artima.com/weblogs/viewpost.jsp?thread=208860

对如何做到这一点进行了很好的讨论。它很棘手,邪恶和黑客,但它可以做到。