当前位置: 首页 > 知识库问答 >
问题:

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

尉迟兴修
2023-03-14

我想用java为DirtyChecking创建自定义注释。我想用这个注释比较两个字符串值,比较后会返回一个布尔值。

例如:我将把@DirtyCheck(“newValue”、“oldValue”)放在属性上。

假设我制作了一个界面:

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

我的问题是:

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

共有3个答案

仇正豪
2023-03-14

自定义注释。JAVA

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
     int studentAge() default 21;
     String studentName();
     String stuAddress();
     String stuStream() default "CS";
}

如何在Java中使用注释领域?

TestCustomAnnotation.java

package annotations;
import java.lang.reflect.Method;
public class TestCustomAnnotation {
     public static void main(String[] args) {
           new TestCustomAnnotation().testAnnotation();
     }
     @CustomAnnotation(
                studentName="Rajesh",
                stuAddress="Mathura, India"
     )
     public void testAnnotation() {
           try {
                Class<? extends TestCustomAnnotation> cls = this.getClass();
                Method method = cls.getMethod("testAnnotation");

                CustomAnnotation myAnno = method.getAnnotation(CustomAnnotation.class);

                System.out.println("Name: "+myAnno.studentName());
                System.out.println("Address: "+myAnno.stuAddress());
                System.out.println("Age: "+myAnno.studentAge());
                System.out.println("Stream: "+myAnno.stuStream());

           } catch (NoSuchMethodException e) {
           }
     }
}
Output:
Name: Rajesh
Address: Mathura, India
Age: 21
Stream: CS

参考

燕英逸
2023-03-14

回答第二个问题:注释不能返回值。处理注释的类可以处理对象。例如,这通常用于日志记录。我不确定使用注释来检查对象是否脏是有意义的,除非您想在这种情况下抛出异常或通知某种类型的DirtyHandler

对于你的第一个问题:你真的可以自己花点力气来找到这个。这里有足够的关于stackoverflow和web的信息。

松涵容
2023-03-14

首先,您需要标记注释是针对类、字段还是方法。假设它是for method:所以你在注释定义中写了这个:

@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中创建自定义异常? 问题答案: 要定义受检查的异常,请创建的子类(或子类的层次结构)。例如: 可能引发或传播此异常的方法必须声明它: …,并且调用此方法的代码必须处理或传播此异常(或同时处理): 你会在上面的示例中注意到该错误IOException已被捕获并重新抛出为。这是用于封装异常的常用技术(通常在实现API时)。 有时在某些情况下,你不想强制每个方法在其throws

  • 问题内容: 注释如何与Java一起使用?以及如何创建这样的自定义注释: 基本上,我需要保留的POJO在持久化时像这样进行序列化: 这样,实际的生成/持久对象是这样的: 任何想法如何实现这一点? 问题答案: 如果创建自定义注释,则必须使用此处的 API 示例进行处理。您可以参考如何声明注释。 这是Java中的示例注释声明的样子。 并被称为。 表示您想在运行时保留注释,并且可以在运行时访问它。 表示您

  • 问题内容: 我想知道如何在java中设置自己的侦听器。例如,我有一个将数字从1递增到100的函数。我想在值达到50时设置侦听器。我该怎么做?请给我建议任何教程。 问题答案: 查看使用侦听器的所有类的源代码。实际上,这很容易: 为您的听众创建一个界面,例如 维护清单 侦听器应在每个事件上进行遍历,然后遍历列表并使用一些事件参数调用适当的方法 至于观察者模式以及一些Java代码,请看维基百科。

  • 问题内容: 有没有一种方法可以JButton用您自己的按钮图形而不是仅在按钮内部创建图像? 如果没有,是否还有另一种方法可以JButton在Java中创建自定义? 问题答案: 当我第一次学习Java时,我们不得不制造Yahtzee,我认为创建自定义的Swing组件和容器会很酷,而不仅仅是在一个组件上绘制所有内容JPanel。Swing当然,扩展组件的好处是能够添加对键盘快捷键和其他辅助功能的支持,

  • 问题内容: 我正在尝试在Log4j2中编写自己的RewritePolicy。该文档指出: RewritePolicy是一个接口,允许实现在将LogEvent传递给Appender之前检查并可能对其进行修改。RewritePolicy声明一个必须执行的名为rewrite的方法。该方法通过LogEvent传递,并且可以返回相同事件或创建一个新事件。 这是我的 java类 : 这是我的 yaml配置 文

  • 在一次采访中,我最近被问到以下问题: 有没有其他方法可以创建自定义的,而不使用: 扩展异常类或的子类,用于检查异常 为未检查的异常扩展或的子类。 可能的答案是什么?