java - 如何在 java 中创建自定义注释?

标签 java annotations

我想在 java 中为 DirtyChecking 创建自定义注释。就像我想使用此注释比较两个字符串值,比较后将返回一个 boolean 值。

例如:我将把 @DirtyCheck("newValue","oldValue") 放在属性上。

假设我做了一个界面:

 public @interface DirtyCheck {
    String newValue();
    String oldValue();
 }

我的问题是:

  1. 我在哪里创建一个类来创建用于比较两个字符串值的方法?我的意思是,这个注解如何通知我必须调用这个方法?
  2. 如何获取该方法的返回值?

最佳答案

首先您需要标记注解是针对类、字段还是方法。假设它用于方法:所以您在注释定义中这样写:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DirtyCheck {
    String newValue();
    String oldValue();
}

接下来你必须编写比方说 DirtyChecker 类,它将使用反射来检查方法是否有注释并做一些工作,例如如果 oldValuenewValue 是相等的:

final class DirtyChecker {

    public boolean process(Object instance) {
        Class<?> clazz = instance.getClass();
        for (Method m : clazz.getDeclaredMethods()) {
            if (m.isAnnotationPresent(DirtyCheck.class)) {
                DirtyCheck annotation = m.getAnnotation(DirtyCheck.class);
                String newVal = annotation.newValue();
                String oldVal = annotation.oldValue();
                return newVal.equals(oldVal);
            }
        }
        return false;
    }
}

干杯, 迈克尔

关于java - 如何在 java 中创建自定义注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12260037/

相关文章:

java - 注解会影响 Java 默认序列化吗?

entity-framework - 使用数据库优先模型 (EF 5) 向模型添加验证

java - CGLib - 创建一个带有一些字段的 bean 并在它们上面放置注释?

java - Java中的多锁单解锁?

IOS 11 - 当另一个 pin 落后时,MKMapView pin 对话框不可点击

Java网络应用程序: where/how to automatically set each picture's width/height

带 2 个参数的 java jpql 查询

java - Hibernate:没有为实体指定标识符(是的,我已经用@Id装饰了......)

java - 写入输出流处理过程中出错

java - A*寻路算法靠墙