Hi all,

I hope this is correct mailing list - if not, please feel free to point me to different one.

Consider following code:

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    @interface C { }

    abstract class A<T> {
        public abstract void method(T arg);
    }

    class B extends A<String> {
        @Override
        @C
        public void method(String arg) { }
    }

    public static void main(String[] args) {
        for(Method m : B.class.getMethods()) {
            if(m.isAnnotationPresent(C.class)) {
                System.out.println(m);
            }
        }
    }

When executed on JDK8 (1.8.0-ea-b124), it prints out two methods:

public void org.glassfish.tyrus.test.standard_config.GenericClientEndpointTest$B.method(java.lang.String) public void org.glassfish.tyrus.test.standard_config.GenericClientEndpointTest$B.method(java.lang.Object)

result on JDK7 (just one method):

public void org.glassfish.tyrus.test.standard_config.GenericClientEndpointTest$B.method(java.lang.String)

Why is the method with Object param added to result set? And why it does have @C annotation declared? If this is intentional, is there any way how I could reliably filter out method with Object as parameter to get same result as on JDK7?

Thanks and regards,
Pavel

Reply via email to