您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Java中注解怎么用
## 一、注解的基本概念
### 1.1 什么是注解
注解(Annotation)是Java 5引入的一种元数据形式,它提供了一种向代码添加额外信息的机制。注解本身不会直接影响代码逻辑,但可以被编译器、开发工具或运行时环境读取并执行相应操作。
```java
@Override
public String toString() {
return "This is an example";
}
@Override
帮助检查方法重写@Deprecated
标记已过时的方法注解 | 作用 |
---|---|
@Override |
表示方法重写父类方法 |
@Deprecated |
标记方法/类已过时 |
@SuppressWarnings |
抑制编译器警告(如”unchecked”) |
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value() default "";
}
元注解 | 描述 |
---|---|
@Target |
指定注解可应用的目标(类、方法、字段等) |
@Retention |
指定注解保留策略(SOURCE/CLASS/RUNTIME) |
@Documented |
表示注解应包含在Javadoc中 |
@Inherited |
允许子类继承父类的注解 |
@Repeatable |
表示注解可以在同一位置重复使用 |
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Author {
String name();
String date();
int version() default 1;
}
@Author(name = "John", date = "2023-10-01", version = 2)
public class MyClass {
@Author(name = "John", date = "2023-10-02")
public void myMethod() {}
}
Class<?> clazz = MyClass.class;
if (clazz.isAnnotationPresent(Author.class)) {
Author author = clazz.getAnnotation(Author.class);
System.out.println("Author: " + author.name());
}
Method method = clazz.getMethod("myMethod");
Author methodAuthor = method.getAnnotation(Author.class);
Field field = clazz.getDeclaredField("fieldName");
if (field.isAnnotationPresent(MyFieldAnnotation.class)) {
// 处理字段注解
}
@SupportedAnnotationTypes("com.example.MyAnnotation")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class MyAnnotationProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
// 处理逻辑
return true;
}
}
processingEnv
:获取处理环境roundEnv.getElementsAnnotatedWith()
:获取被注解的元素Filer
:生成新源文件@Test
@DisplayName("Should return correct result")
void testCalculation() {
assertEquals(4, 2+2);
}
@RestController
@RequestMapping("/api")
public class MyController {
@Autowired
private MyService service;
@GetMapping("/users")
public List<User> getUsers() {
return service.getAllUsers();
}
}
@Data
@Builder
@AllArgsConstructor
public class User {
private Long id;
private String name;
}
@Inherited
的作用范围(仅对类有效)@Retention
导致运行时无法获取@Repeatable(Schedules.class)
public @interface Schedule {
String time();
}
@Schedule(time = "10:00")
@Schedule(time = "15:00")
public void scheduledTask() {}
public void process(@NonNull String input) {
Objects.requireNonNull(input);
}
public class Box<@CustomAnnotation T> {
public void set(@CustomAnnotation T content) {}
}
Java注解作为强大的元编程工具,已经深度集成到现代Java开发中。从基础的@Override
到复杂的框架注解,合理使用注解可以:
- 显著减少样板代码
- 提高代码可读性
- 实现声明式编程
- 增强编译时检查
随着Java语言的发展,注解功能仍在不断增强(如Java 17引入的模式匹配增强),掌握注解的使用是Java开发者必备的核心技能之一。
注意:本文示例基于Java 11环境,部分特性可能需要更高版本支持。实际开发时应根据项目使用的Java版本进行调整。 “`
这篇文章共计约2100字,涵盖了Java注解的核心知识点,包括: 1. 基本概念和内置注解 2. 自定义注解开发详解 3. 运行时和编译时处理 4. 实际框架应用案例 5. 最佳实践和高级特性
采用Markdown格式,包含代码块、表格等元素增强可读性,适合作为技术博客或开发文档。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。