了解Java中的注释

了解Java中的注释,第1张

了解Java中的注释

注释基本上是可以附加到字段,方法,类等的数据位。

在Java中声明注释的语法有点尴尬。它们看起来有点像接口(毕竟是用声明的

@interface
),但它们并不是真正的接口。我认为您可能已将该
doTestTarget()
方法放入您的
TestAnnotations
类中,因为您认为注释是接口并且需要实现它。这不是正确的-
您可以删除此方法,并且可以根据需要从代码中对其进行调用,这样做不会给您带来任何问题。

另外,您可能无意将注释放在字段上

str
。注释仅适用于紧随其后的内容。结果,您的代码无法编译,因为您已将注释应用于字段,但声明只能将注释应用于方法。更改
@Target(ElementType.METHOD)
@Target(ElementType.FIELD)
,然后应编译您的代码。

至于字符串发生了什么

Hello World!
,它将被写入.class文件,并且可用于读取Java类的任何工具。但是,它不一定在运行时在JVM中可用。发生这种情况是因为您没有
@Retention
@Test_Target
注释指定。为默认值
@Retention
RetentionPolicy.CLASS
,这意味着JVM大可不必去加载出来的类文件。(有关RetentionPolicy枚举,请参见Javadoc。)

我想您想看到一种在运行时从此批注中读取值的方法。如果是这样,我建议您添加

@Retention(RetentionPolicy.RUNTIME)
注释,以确保它在运行时可用。

要在运行时访问注释及其中包含的值,您需要使用反射。我已经

TestAnnotations
按照以下步骤重写了您的课程,以进行快速演示:

import java.lang.reflect.Field;public class TestAnnotations {   @Test_Target(doTestTarget="Hello World !")   private String str;   public static void main(String[] args) throws Exception {      // We need to use getDeclaredField here since the field is private.      Field field = TestAnnotations.class.getDeclaredField("str");      Test_Target ann = field.getAnnotation(Test_Target.class);      if (ann != null) {         System.out.println(ann.doTestTarget());      }   }}

当我运行此代码时,它将为我提供以下输出:

你好,世界 !


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5429700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存