Java泛型 – 类<?>构造函数参数问题
作者:互联网
我已经使用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> {
...
}
即,作为类的基类,“绑定”类型参数,有方法obtain the type information via reflection(虽然这是非常难看,因为这在API恕我直言中并不是很好支持).
标签:java,search,hibernate,generics,hibernate-search 来源: https://codeday.me/bug/20190517/1122225.html