写一个检擦注解案例
时间: 2024-02-23 22:59:55 浏览: 21
好的,以下是一个使用检查注解的案例。
假设我们有一个类`Person`,其中有一个`name`字段。我们希望在代码中使用该字段时,如果该字段为null或空字符串,则抛出一个异常。为了实现这个功能,我们可以定义一个检查注解`NotNullOrEmpty`,并使用它来标记`name`字段。
定义`NotNullOrEmpty`注解:
```java
import java.lang.annotation.*;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NotNullOrEmpty {
}
```
在`Person`类中使用`NotNullOrEmpty`注解标记`name`字段:
```java
public class Person {
@NotNullOrEmpty
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
```
在访问`name`字段时,使用反射机制获取该字段的注解,如果该字段为null或空字符串,则抛出一个异常。
```java
import java.lang.reflect.*;
public class Test {
public static void main(String[] args) throws Exception {
Person p1 = new Person("Alice");
Person p2 = new Person("");
validate(p1);
// validate(p2); // 抛出异常:java.lang.IllegalArgumentException: name cannot be null or empty
}
private static void validate(Object obj) throws Exception {
for (Field field : obj.getClass().getDeclaredFields()) {
if (field.isAnnotationPresent(NotNullOrEmpty.class)) {
field.setAccessible(true);
Object value = field.get(obj);
if (value == null || value.toString().isEmpty()) {
throw new IllegalArgumentException(field.getName() + " cannot be null or empty");
}
}
}
}
}
```
在上面的代码中,我们定义了一个`validate`方法,该方法使用反射机制遍历类中的字段,如果该字段被`NotNullOrEmpty`注解标记,就检查该字段的值是否为null或空字符串。如果是,则抛出一个异常。在`main`方法中,我们分别创建了两个`Person`对象,并调用了`validate`方法进行检查。`p1`的`name`字段不为空,所以检查通过;`p2`的`name`字段为空,所以抛出了一个异常。