我有一个类需要获取方法的返回类型,该类已被其他方法覆盖。
假设我有一个类:
public class SuperDuperClass {
public Object someMethod();
}
然后我创建了一个子类:
public class DuperClass extends SuperDuperClass{
public String someMethod();
}
然后我获得了DuperClass的someMethod()
:
Method theMethod = DuperClass.class.getMethod("someMethod", new Class[]{});
Class theMethodReturnType = theMethod.getReturnType();
我非常希望returnType为String,如DuperClass中所定义。但是,我收到了SuperDuperClass中定义的Object。似乎反射并不关心overriden方法返回另一个类型,因此返回了supermethod类型。
在这种情况下,有什么东西可以获得子类的返回类型吗?
我接受伏都教,巫术和血魔法。
Ansver:当我被允许时,我会发布一个真正的ansver。
getMethods()方法返回两个someMethod实例。我正在使用getMethod,至少在我的JVM上,它返回超类(而不是子类)。
愚蠢的我。答案 0 :(得分:3)
您处于协变返回类型的情况 你可以在https://dzone.com/articles/covariant-return-type-abyssal
找到解释答案 1 :(得分:2)
问题就在此。
*|IF:house=true|*
House,
*|END:IF|*
*|IF:garden=true|*
Garden,
*|END:IF|*
*|house!=true && garden=!true|*
House and Garden not included
*|END:IF|*
只返回一种方法。但实际上,这种签名存在两种方法。 getMethods返回someMethod和" Object"返回类型,以及" String"返回类型。
getMethod返回哪一个似乎并不完全可靠。
相反
DuperClass.class.getMethod("someMethod", new Class[]{});
返回正确的方法。