getdeclaredannotation获取不到override
时间: 2023-05-26 17:05:17 浏览: 79
android @override 报错解决方案
5星 · 资源好评率100%
这是因为 `@Override` 并不是一个运行时注解,而是一个编译时注解,它会在编译器进行检查,如果某个方法使用了 `@Override` 注解但并没有覆盖父类方法,就会报编译错误。因此在运行时,`getDeclaredAnnotation` 方法获取不到 `@Override` 注解。
要想获取某个方法是否覆盖了父类方法,可以使用 `getModifiers` 方法和 `isBridge` 方法来判断。如果方法的修饰符包含 `ACC_BRIDGE`,同时返回值的类型和方法签名都和父类方法一致,则说明该方法是一个桥接方法,也就是为了解决泛型中类型擦除的问题而生成的方法,不是真正意义上的重写方法,此时可以认为该方法并没有覆盖父类方法。
示例代码:
```java
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) throws Exception {
Sub sub = new Sub();
Method subMethod = sub.getClass().getMethod("method");
Method superMethod = sub.getClass().getSuperclass().getMethod("method");
// 判断方法是否是桥接方法
boolean isBridge = (subMethod.getModifiers() & 0x0040) != 0 && subMethod.isBridge();
System.out.println("subMethod isBridge: " + isBridge);
// 判断方法是否覆盖了父类方法
boolean isOverride = subMethod.getDeclaringClass() != superMethod.getDeclaringClass() || !isBridge;
System.out.println("subMethod isOverride: " + isOverride);
}
}
class Super {
public void method() {}
}
class Sub extends Super {
@Override
public void method() {}
}
```
阅读全文