如何将通用参数转换为类

Joh*_*ica 2 java generics

public abstract class BaseDaoImpl<E extends AbstractEntity> implements BaseDao<E> {

    .....

    public BaseDaoImpl() throws DataAccessException {
        logger = LoggerFactory.getLogger(E);  <<-- error here.
    }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,调用时出现错误getLogger(E)

E无法解析为变量

这是有道理的,但是getLogger(E.class)(或其变体)也不起作用。

我不想在构造函数中传递文字类,因此,诸如将构造函数标头更改为:的解决方案
public BaseDaoImpl(Class<E> clazz) ...不是一种选择。

如何获得课程类型E

请注意以下答案:没有参数时如何获得泛型类型的类?
没有帮助。

jac*_*obm 5

如果不更改构造函数,您将无法E在运行时学习任何您还不了解的静态信息。这是因为在Java中,泛型参数根本不会对运行时产生任何影响-编译器会从字面上清除E其生成的代码中的所有引用。因此,如果您想要代码来告知实例化其类型参数的类,则必须自己添加某种类型的参数(例如,Class对象)。只是没有办法解决。