我有一个通用的基础类:泛型类 - 的getClass()的getName()
public class BaseLabel<T> extends JXLabel {
private static final long serialVersionUID = 1L;
public BaseLabel() {
System.out.println(T.class.getClass().getName()); //error
}
}
和儿童类:
public class ChildLabel extends BaseLabel<ChildLabel> {
private static final long serialVersionUID = 2L;
public ChildLabel() {
}
}
我收到编译错误。
有没有什么办法从BaseClass的构造函数中获取实际的类名。在这里,通过实际的课程,我指的是我将要实例化的那个课程。
例如,我正在实例化ChildClass,ChildClass clz = new ChildClass()
;
然后println()
将打印package.ChildClass
。
在此先感谢。
的编译错误是:
cannot select from a type variable System.out.println(T.class.getClass().getSimpleName());
如果我把从abstract BaseClass
的构造this.getClass.getSimpleName()
。它正在打印ChildClass
。
为什么?
这是由于,因为我实例化ChildClass
所以这是指向ChildClass
的对象。
您要求的信息在编译时不可用,所以据我所知,您要做的事情是不可能的。但即使在运行时,您也会遇到Java获取此信息的一般限制。请阅读本文,特别是有关泛型和类型删除的部分:[Java理论与实践:泛型](http://www.ibm.com/developerworks/java/library/j-jtp01255/index.html) – 2012-02-23 16:24:45
什么是编译错误说? – Thomas 2012-02-23 16:25:13
您正在导入JXLabel吗? – ewok 2012-02-23 16:27:18