问题是我需要获得类似T.class
的内容,因为veryImportantMethod
(来自下面的示例)具有Class参数。
public abstract class Something<T> {
public abstract Class<T> getGenericClass();
}
public class Example extends Something<Example> {
@Override
public Class<Example> getGenericClass() {
return Example.class;
}
}
public static abstract class BaseDao<T extends Something<T>> extends Amazing {
T type;
public T doSomething() {
this.veryImportantMethod(type.getGenericClass());
}
}
public static class Son extends BaseDao<Example> {
}
其实我正在
...读取未写字段... NP_UNWRITTEN_FIELD
我该如何解决这个问题?
答案 0 :(得分:0)
我不是100%确定这是否是你所追求的......但
首先,定义的Example.getGenericClass完全没用,你可以获得相同的答案但是在Example类型变量上调用getClass,
Example example = new Example();
example.getClass() == Example.class; // always true.
因此,如果您可以保证type
始终具有非空值,则只需在其上调用type.getClass()
即可。
如果type
可能为null,那么除非您通过单独引用该类来记录该类,否则您将失去运气。我怀疑type
只是获得Example.class
。在那种情况下最好的
直接指向Class对象。此引用必须由构造函数初始化,并且通常只有使其成为最终才有意义,因为它不应在包含对象的实时期间更改。
public static abstract class BaseDao<T extends Something<T>> extends Amazing {
private final Class<T> clazz;
public BaseDao(final Class<T> clazz) {
this.clazz = clazz;
}
public void doSomething() {
this.veryImportantMethod(clazz);
}
}
...
class ExampleDao extends BaseDao<Example> {
public ExampleDao() {
super(Example.class);
}
}
...