getdeclaredannotation获取不到override
时间: 2023-05-26 17:05:19 浏览: 65
getDeclaredAnnotation 方法可以获得一个类、方法、字段等上标注的注解对象,但是如果这个对象的注解是 Java 语言中的 @Override 注解,那么该方法无法获得该注解对象。
这是因为 @Override 注解是一个特殊的注解,它只存在于 Java 源代码中,在 Java 编译器编译源代码时会被编译器自动处理并添加到编译好的字节码文件中。在字节码文件中,@Override 注解的信息被嵌入到方法描述符中,而不是以注解的形式保存在注解表中。
因此,如果要判断一个类、方法等是否被 @Override 注解修饰,不能使用 getDeclaredAnnotation 方法。可以使用反射 API 中的 getModifiers 方法来获取修饰符的信息,然后通过 Modifier 类中的 isFinal、isStatic等方法来判断是否被 @Override 注解修饰。代码示例如下:
```
import java.lang.reflect.*;
public class Test {
public static void main(String[] args) throws Exception {
Method method = Test.class.getDeclaredMethod("foo");
boolean isOverride = Modifier.isOverride(method.getModifiers());
System.out.println("foo is override: " + isOverride);
}
@Override
public String toString() {
return "Test";
}
private void foo() {
System.out.println("foo");
}
}
```
输出:
```
foo is override: false
```
因为 `foo()` 方法并没有被 @Override 注解修饰,而是 JDK 1.5 中新加入的重写方法首先编译时不能出错的标记,所以我们使用 getModifiers 和 Modifier.isOverride 方法进行判断。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)