我试图通过一些在线材料来学习Java中的注释。
在下面的代码,发生了什么事我亲爱的“Hello World”的字符串,我在这行通过:@Test_Target(doTestTarget="Hello World !")
?
@Target(ElementType.METHOD)
public @interface Test_Target {
public String doTestTarget();
}
上面是定义的注释,下面是其用法
public class TestAnnotations {
@Test_Target(doTestTarget="Hello World !")
private String str;
public static void main(String arg[]) {
new TestAnnotations().doTestTarget();
}
public void doTestTarget() {
System.out.printf("Testing Target annotation");
}
}
当我运行此代码时,它只是打印 Testing Target annotation
请帮帮我,我完全不了解注释。
注释基本上是可以附加到字段,方法,类等的数据位。
在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());
}
}
}
当我运行此代码时,它将为我提供以下输出:
你好,世界 !
问题内容: 我试图了解JPA 中注释的属性。我在下面的示例中创建了一个客户具有订单列表的示例: 现在,当我使用Hibernate生成表时,我看到Hibernate仅创建了2个表: 另外,如果我尝试保存客户和一些订单,我会在下面看到由Hibernate生成的DML语句: 为什么Hibernate试图在TBL_ORDER中插入和更新记录,而不仅仅是运行单个插入查询? 现在,如果我删除mapledBy属
本文向大家介绍全面解析Java中的注解与注释,包括了全面解析Java中的注解与注释的使用技巧和注意事项,需要的朋友参考一下 注解 一、什么是 Annotation? (注解 or 注释) Annotation, 准确的翻译应该是 -- 注解。 和注释的作用完全不一样。 Annotation 是JDK5.0及以后版本引入的一个特性。 与类、接口、枚举是在同一个层次,可以成为java 的一个类型。 语
问题内容: 我知道使用这种克隆机制并不是一个好主意(因为它被某些作者建议“破了”),尽管我需要帮助来理解它的工作原理。我们得到以下类层次结构: 既然扩展了,如何返回一个实例?实际上是返回对class对象的引用。为什么我们可以将其投射到?有不在班上的成员。默认行为实际上是如何设法自动克隆此变量的(因为该变量在class中没有记录)? 同样,M也是如此。在我们中,将一个对象从class (由返回)转换
问题内容: 有一个结构。我想以这种方式链接这三个实体:公司应包含ID,公司名称和部门列表,每个部门都有一个工人列表,ID和部门名称。每个工人都有名字,身份证。 我试图与一对多和多对一建立联系,但未成功。 公司 部 工人 我从开始: 它填充公司,但不填充其他表,也没有创建任何联接(映射)错误: 问题答案: 除了Glenn Lane的答案中提到的级联,您还需要了解双向关联是如何工作的。 它们有一个所有
本文向大家介绍java 中@Deprecated 注解的实例详解,包括了java 中@Deprecated 注解的实例详解的使用技巧和注意事项,需要的朋友参考一下 java 中@Deprecated 注解的实例详解 1 简介 Deprecated 同 SuppressWarnings 一样,都是 J2SE 5.0 中定义在Java.lang包中的标准 Annotation 之一,其可以标注在类
问题内容: 我是一个Android初学者。在尝试管理活动生命周期的代码时,我遇到了新问题。 我对代码理解得很好,但是在ActionBar SuppressLint中却给出了错误。当我双击它时,正在添加。这是什么意思? 问题答案: 是Android Lint工具使用的注释。 当代码中的某些内容不是最佳的或可能崩溃时,Lint会告诉您。通过传递,您将抑制所有警告,这些警告会告诉您是否正在使用在您的设备