我有一个通用方法,它的工作方式应该类似于递归,但每次调用都会调用该方法的不同实例。
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/