我有一个对象,我需要为该对象获取Type。我需要从擦除的对象中获取rawType。
例如我有一个班级
class Blah{}
class Dummy extends Blah{}
class A<T extends Blah>
{
}
i create a instance for A like this new A<Dummy>().
我需要获取创建对象的原始类型,我看到Apache有TypeUtils getRawClass。但它需要一个java Type。我有实际的实例,但我如何从中得到Type。做object.getClass()似乎没有帮助,原始类型没有恢复。希望得到一些意见。
编辑: 感谢您的回复,就像下面的答案我找不到任何方法来获得实际类型。保留该类型的唯一建议是使用超类型令牌。 http://gafter.blogspot.com/2006/12/super-type-tokens.html
答案 0 :(得分:4)
答案 1 :(得分:0)
正如@Thilo所建议的那样,通用信息可在编译时获得。如果你需要它,那么你必须将它存储在对象本身的某个地方。
示例代码:
class A<T extends Blah> {
private Class<T> type;
public A(Class<T> type) { // class must be exactly same as type of object
this.type = type;
}
public Class<T> getType() {
return type;
}
}
...
A<Dummy> a = new A<Dummy>(Dummy.class); // only Dummy.class is the valid argument
System.out.println(a.getType().getName()); // com.x.y.z.Dummy
...
A<Dummy> a = new A<Dummy>(Blah.class); // not valid, compile time error
A<Dummy> a = new A<Dummy>(Dummy2.class); // not valid, compile time error
A<Dummy> a = new A<Dummy>(XYZ.class); // not valid, compile time error