我用java已经有一段时间了,但是有些东西我还是不太清楚,特别是在泛型方面。。。
事情是这样的:我有这个 Search
我正在使用的类(请参阅此处了解详细信息),其构造如下:
public Search(Class<?> searchClass) {...}
此外,我还有一个参数化的通用 Package 器,如下所示:
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...??? );
...
}
...
}
我认为我所面临的问题是显而易见的,从给定的例子。
有人能告诉我在这里可以做什么,或者其他的选择吗?
2条答案
按热度按时间hl0ma9xz1#
最简单的方法是将责任传递给实际示例化和使用示例的人
BaseSelectorComposer
,即:如果你的
BaseSelectorComposer
是一个抽象的子类,它的用法如下i、 例如,作为“绑定”类型参数的类的基类,有一些方法可以通过反射获得类型信息(尽管这非常难看,因为api imho并没有很好地支持这一点)。
wlsrxk512#
一般来说,这是一个很难解决的方案。在.net背景下,我个人发现很少有情况可以解决这个问题,因为java不支持静态泛型类型解析(例如在.net中可以使用
typeof(T)
).为了解决这个问题,我建议您找到一种方法,要么从外部获取类,要么获取该类的示例。一个可能的解决办法是改变
doAfterCompose
方法之一:-或者-
如果不能修改方法签名(我看到它是重写),请尝试使用类的成员
BaseSelectorComposer<T>
这将保持理想的Class<?>
示例。