接口方法的注释在 Java 7 中继承,但在 Java 8 中不继承
2022-09-02 20:41:44
我正在从Java 7迁移到Java 8,并且我遇到了语言中的这种变化。
我有一个带有注释方法的超接口:
public interface SuperInterface {
@X
SuperInterface getSomething();
}
我有一个具有相同注释方法的子接口,但返回一个子接口:
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 {
}