java - 是什么导致了 java 泛型和反射的编译错误?

标签 java generics reflection

我有一个通用方法,它的工作方式应该类似于递归,但每次调用都会调用该方法的不同实例。

public <M extends A> void doSomething(Class<M> mClass, M mObject)
{
    // ... Do something with mObject.

    A object = getObject();
    Class<? extends A> objectClass = object.getClass();

    doSomething(objectClass, objectClass.cast(object)); // Does not compile.
}

private A getObject() {...}

问题是带有注释的行没有编译,给出以下错误:

The method doSomething(Class, M) in the type MainTest is not applicable for the arguments (Class, capture#3-of ? extends A)

我不太明白为什么如果编译器可以用 M = "? extends A"调用 doSomething 却不编译。

为什么不编译?

最佳答案

好吧,这是一个粗略的解释

您已经输入了您的方法,以便它接受 M,它是 A 的子类型

现在您正在使用“objectClass”调用您的方法,它是 A 的子类型但不一定是 M 的子类型。

因此编译器提示...

如果您能详细解释一下您想要做什么,我可以帮助您找到解决方案。

关于java - 是什么导致了 java 泛型和反射的编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14680379/

相关文章:

java - javax 参数过多

java - 如何发现监听端口 x 的 IP 地址

java - 为用户定义的 Oracle 表类型编写 MyBatis3 TypeHandler

C# 泛型类型的声明

java - 如何获取对象所有字段的标题

c++ - 如何实例化一个只知道其名称的对象?

java - 产品风格和来源层次结构

java - 泛型和静态内部类的问题

c# - 通用 T GetByID<K>(K ID_)

c# - 如何检查我的未初始化变量是否为 List 类型?