java.lang.reflect.Method.getGenericReturnType返回错误的值

时间:2017-12-21 06:24:23

标签: java generics reflection

我在另一个接口中有一个简单的接口,并尝试获取该方法的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输出

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

0 个答案:

没有答案