Я перехожу из Java 7 в Java 8, и я встречал это изменение на языке.
У меня есть Superinterface с аннотированным методом:
public interface SuperInterface {
@X
SuperInterface getSomething();
}
У меня есть SubInterface с тем же аннотированным методом, но возвращающий суб-интерфейс:
public interface SubInterface extends SuperInterface {
@X
SubInterface getSomething();
}
Когда я запускаю этот тест, он терпит неудачу в Java 8, но не в Java 7:
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) {
final Method[] methods = SubInterface.class.getMethods();
for (Method method : methods) {
if (method.getAnnotations().length == 0) {
throw new RuntimeException("No annotations found for " + method);
}
}
}
}
Аннотации метода интерфейса наследуются в Java 7, но не в Java 8, верно ли это?
@X определяется как:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface X {
}