作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
对于使用 Java 8 (JDK 1.8.0_71) 和 Mockito(2.0.44-beta 版)的特定反射调用,我得到了一个奇怪的结果。
调用以下内容:
BDDMockito.class.getMethod("given", Object.class).getGenericReturnType().getTypeName()
给出了这个错误的结果:
org.mockito.BDDMockito.org.mockito.BDDMockito$BDDMyOngoingStubbing<T>
这看起来不对(包不存在),我还没有在其他 Java 类或 BDDMockito 的其他方法中看到这个问题。我认为结果应该是:
org.mockito.BDDMockito$BDDMyOngoingStubbing<T>
我得到的结果有解释吗?这是一个已知问题还是我应该向 Oracle 报告?
最佳答案
是的,这是一个错误。已在工单中报告JDK-8054213目前所有版本(包括当前的 JDK 9 beta)均未解决。
请注意,您可以使用更简单的示例重现它。问题来自使用嵌套类作为方法返回类型。 getGenericReturnType
在输出中错误地重复了类名。这可以通过静态嵌套类或内部类重现。
package parent;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(Main.class.getMethod("bar").getGenericReturnType());
// prints "parent.Main.parent.Main$Bar<T>"
}
public <T> Bar<T> bar() {
return null;
}
/*static*/ class Bar<T> {}
}
关于java - Java 8 上的 getGenericReturnType 输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36658241/
对于使用 Java 8 (JDK 1.8.0_71) 和 Mockito(2.0.44-beta 版)的特定反射调用,我得到了一个奇怪的结果。 调用以下内容: BDDMockito.class.get
据我了解,泛型是 Java 的编译时特性,编译后的字节码中不存在参数化类型信息。我现在发现了 Field#getGenericType 和 Method#getGenericReturnType 方法
我是一名优秀的程序员,十分优秀!