我使用 Java 已经有一段时间了,但有些事情我还是不太清楚,尤其是涉及到泛型时......
事情是这样的:我有一个正在使用的 Search
类 ( see here for details ),它的构造如下:
public Search(Class<?> searchClass) {...}
此外,我对此有一个参数化的通用包装器,如下所示:
public class HibernateSearch<E> extends Search implements Serializable {
public HibernateSearch(Class<E> entityClass) {
super(entityClass);
}
// ... omitted for brevity
}
现在,我需要的是:我想创建参数化类,它包含这个类作为它的字段,例如
public class BaseSelectorComposer<T> extends SelectorComposer<Window> {
private HibernateSearch<T> searchObject;
...
@Override
public void doAfterCompose(Window comp) throws Exception {
super.doAfterCompose(comp);
this.searchObject =
new HibernateSearchObject<T>( now what...??? );
...
}
...
}
我认为我面临的问题从给定的例子中是显而易见的。
有人可以建议在这里可以做什么,或者其他选择吗?
最佳答案
最简单的方法是将责任传递给实际实例化和使用 BaseSelectorComposer
实例的人,即:
public class BaseSelectorComposer<T> extends SelectorComposer<Window> {
private HibernateSearch<T> searchObject;
private final Class<T> theType;
public BaseSelectorComposer(Class<T> token) {
theType = token;
}
...
@Override
public void doAfterCompose(Window comp) throws Exception {
super.doAfterCompose(comp);
this.searchObject = new HibernateSearchObject<T>(theType);
...
}
...
}
如果您的 BaseSelectorComposer
是一个抽象子类,它只被使用过
class IntSelectorComposer extends BaseSelectorComposer<Integer> {
...
}
即,作为“绑定(bind)”类型参数的类的基类,有多种方法可以obtain the type information via reflection (尽管这非常丑陋,因为恕我直言,API 并没有很好地支持它)。
关于Java 泛型 - Class<?> 构造函数参数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16962907/