I get a strange result for a specific reflection call using Java 8 (JDK 1.8.0_71) and Mockito (version 2.0.44-beta).
Calling the following:
BDDMockito.class.getMethod("given", Object.class).getGenericReturnType().getTypeName()
gives this erroneous result:
org.mockito.BDDMockito.org.mockito.BDDMockito$BDDMyOngoingStubbing<T>
This does not look right (the package does not exist), and I have not seen this problem with other Java classes or with other methods of BDDMockito. I think the result should be:
org.mockito.BDDMockito$BDDMyOngoingStubbing<T>
Is there an explanation for the result I got? Is this a known issue or should I report it to Oracle?
Yes, this is a bug. It has been reported in the ticket JDK-8054213 and is currently unresolved for all versions (including the current JDK 9 beta).
Note that you can reproduce it with a simpler example. The problem comes with the usage of an nested class as a method return type. getGenericReturnType
incorrectly repeats the class name in the output. This is reproducible with a static nested class or an inner class.
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> {}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.