【发布时间】:2018-11-19 02:35:57
【问题描述】:
java 方法返回类型不是实际类型。例如,
public interface Foo<X extends TypeA> {
public X hello();
}
public class Bar implements Foo<TypeB> {
@Override
public TypeB hello() {
...
}
}
Method method = Bar.class.getDeclaredMethod("hello");
Class returnType = method.getReturnType();
returnType 是 TypeA,而不是 TypeB。 TypeB 是 TypeA 的子类。
如何获取方法的实际返回类型?它是TypeB,而不是TypeA。
更新
我用过
Method[] methods = Bar.class.getDeclaredMethods();
然后遍历这些方法。该方法返回超类。验证 getDeclaredMethod("hello") 确实返回子类类型。为什么它们不同?
【问题讨论】:
-
X 被 TypeA 绑定。在这种情况下如何使用反射?谢谢。
-
我使用 JDK 11-ea+17 得到
TypeB。您使用的是什么版本的 Java? -
java版本“1.8.0_60”
-
我也用 JDK8 获得 TypeB。
-
如果仍然发生,请提供mvce,因为问题中的代码甚至无法编译。
标签: java methods reflection return-type