我在另一个接口中有一个简单的接口,并尝试获取该方法的getGenericReturnType,但它返回了错误的值。
1)LongArray.java
package com.test;
public interface LongArray<V> {
public Iterator<V> iterator();
interface Iterator<V> {
}
}
2)Class2.java
package com.test;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class Class2 {
public static void main(String[] argv) throws ClassNotFoundException {
Class cl = null;
cl = Class.forName("com.test.LongArray");
Method[] meths = cl.getDeclaredMethods();
for (Method m : meths) {
Type returnType = m.getGenericReturnType();
if (returnType != null && returnType instanceof ParameterizedType) {
ParameterizedType type = (ParameterizedType) returnType;
System.out.println("Method Generic Return Type: " + m.getGenericReturnType().toString());
System.out.println();
}
}
}
}
Method Generic返回类型:com.test.LongArray.com.test.LongArray $ Iterator
javap LongArray 警告:二进制文件LongArray包含com.test.LongArray 编译自“LongArray.java”
public interface com.test.LongArray<V> {
public abstract com.test.LongArray$Iterator<V> iterator();
}
根据javap输出,它应返回“com.test.LongArray $ Iterator”,但它返回“com.test.LongArray.com.test.LongArray $ Iterator”。
这是java中的错误吗?或者我使用错误的api(getGenericReturnType)返回值?
=============================================== ====
我发现,这是Java中的一个Bug,它已修复 详情请见https://bugs.openjdk.java.net/browse/JDK-8054213