【发布时间】:2013-03-14 00:54:53
【问题描述】:
public abstract class BaseDaoImpl<E extends AbstractEntity> implements BaseDao<E> {
.....
public BaseDaoImpl() throws DataAccessException {
logger = LoggerFactory.getLogger(E); <<-- error here.
}
在上面的代码中,我在调用getLogger(E) 时遇到错误。
E 无法解析为变量
这是有道理的,但getLogger(E.class)(或其变体)也不起作用。
我不想在构造函数中传递文字类,因此无法选择将构造函数标头更改为:public BaseDaoImpl(Class<E> clazz) ...。
如何从E 获取类类型?
请注意以下问题的答案:How to get class of generic type when there is no parameter of it?
不帮忙。
【问题讨论】:
-
你不能,因为类型擦除。
-
Java 泛型与 C++ 模板不同。使用 Java 泛型,类型在编译时被删除。谷歌“java类型擦除”了解详情。这似乎是一个糟糕的决定,但实际上是一个伟大的决定;因为它与旧的 java 完全向后兼容。