首页 > Java8中使用泛型通过反射获得注解的BUG如何解决?

Java8中使用泛型通过反射获得注解的BUG如何解决?

public class Java8Test {
    public static void main(String[] args) {
        Class<B> b = B.class;
        Method[] methods = b.getMethods();
        for (Method method : methods) {
            Annotation resource = method.getAnnotation(Resource.class);
            if (resource != null) {
                System.out.println(method);
            }
        }
    }
}

class A<T extends Object> {

    void print(T t) {
    }
}

class B extends A<String> {
    @Resource
    public void print(String s) {

    }
}

在Java8中输出结果是:
public void com.test.java8.B.print(java.lang.String)
public void com.test.java8.B.print(java.lang.Object)

在Java6和Java7中输出结果是
public void com.test.java8.B.print(java.lang.String)

Java每次升级都不兼容,真是无语了。


真是坑死爹了。http://www.oracle.com/technetwork/java/javase/8-compatibility-guide-2156366.html
一句话:parameter and method annotations are copied to synthetic bridge methods。
我还以为Java升级都是兼容的。

【热门文章】
【热门文章】