假设我有以下课程。
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();
}
}
答案 0 :(得分:3)
您无法计算出T
的运行时值。这是由于type erasure。
答案 1 :(得分:3)
没有。由于类型擦除,类的编译版本的字节码不能保留足够的信息来确定T.传递T类型的实际对象所做的就是你能做的最好的事情。
答案 2 :(得分:1)
确实可以使用相当多的反射来做到这一点。这个链接:
http://www.artima.com/weblogs/viewpost.jsp?thread=208860
对如何做到这一点进行了很好的讨论。它很棘手,邪恶和黑客,但它可以做到。