Java 8中使用getGenericReturnType输出不正确

4

我将使用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报告?

1个回答

3

是的,这是一个bug。它已经在工单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> {}

}

1
真是令人沮丧。这在2014年就已经报告了。它在这里。第223行使用了getName()而不是getSimpleName() - Radiodef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接