Java面向对象设计 – Java注释用法
注释元素的提供值必须是编译时常量表达式,我们不能使用null作为注释中任何类型元素的值。
原始类型
注释类型中的元素的数据类型可以是任何基本数据类型:byte,short,int,long,float,double,boolean和char。
Version注释类型声明两个元素,major和minor,并且都是int数据类型。
以下代码声明了注释类型:
public @interface MyAnnotation {
byte a();
short b();
int c();
long d();
float e();
double f();
boolean g();
char h();
}
@MyAnnotation(a=1, b=2, c=3, d=4, e=12.34F, f=1.89, g=true, h="Y")
我们可以使用编译时常量表达式来指定注释元素的值。
以下两个版本注释实例有效:
@Version(major=2+1, minor=(int)13.2) @Version(major=3, minor=13)
String类型
我们可以在注释类型中使用String类型的元素。
以下代码定义了名为Name的注释类型。它有两个元素,first和last,它们是String类型。
public @interface Name {
String first();
String last();
}
@Name(first="Tom", last="Smith")
public class NameTest {
@Name(first="Jack", last="Iaan")
public void aMethod() {
}
}
在String类型的元素的值表达式中使用字符串连接运算符+是有效的。
@Name(first="Ja" + "ck", last="Ia" + "an")
Class类型
以下代码显示如何使用类类型作为注释值。
import java.io.IOException;
@interface MyAnnotation {
Class<? extends Throwable> willThrow() default java.lang.Throwable.class;
}
public class Main {
@MyAnnotation(willThrow = IOException.class)
public static void testCase1() {
// Code goes here
}
@MyAnnotation()
public static void testCase2() {
}
}
枚举类型
注释可以具有枚举类型的元素。
enum Level {
PENDING, FAILED, PASSED;
}
@interface Review {
Level status() default Level.PENDING;
String comments() default "";
}
@Review(status = Level.PASSED)
public class Main {
}
注释类型
我们可以使用注释类型作为另一个注释类型的声明内的元素的类型。
要为注释类型的元素提供值,请使用用于创建注释类型实例的语法。
@interface Name {
String first();
String last();
}
@interface Version {
int major();
int minor() default 0; // zero as default value for minor
}
@interface Description {
Name name();
Version version();
String comments() default "";
}
@Description(name = @Name(first = "Tom", last = "Smith"), version = @Version(major = 1, minor = 2), comments = "Just a test class")
public class Main {
}
数组类型注释元素
注释可以具有数组类型的元素。数组类型可以是以下类型之一:
- 原始类型
- java.lang.String type
- java.lang.Class type
- 枚举类型
- 注释类型
我们需要在大括号中指定数组元素的值。
数组的元素由逗号分隔。
@interface ItemList {
String[] items();
}
@ItemList(items = { "A", "B" })
public class Main {
}
如果数组中只有一个元素,则允许省略括号。
@ToDo(items={"A"})
@ToDo(items="A")
传递一个空数组
@ToDo(items={})
速记注释语法
假设我们有一个注释类型如下。
public @interface Enabled {
boolean status() default true;
}
要使用带有默认值的Enabled注释类型注释程序元素,我们可以使用@Enabled()语法。
我们不需要为status元素指定值,因为它具有默认值。
我们可以进一步省略括号。
@Enabled
public class Main {
}
@Enabled()
public class Main {
}
只有一个元素的注释类型具有速记语法。
如果注释类型只有一个具有命名值的元素,我们可以省略name = value对中的名称。
以下代码声明了公司注释类型,它只有一个名为value的元素:
public @interface Company {
String value();
}
当使用公司注释时,我们可以省略name = value对的名称。
@Company(value="Inc.")
public class Test {
}
变成
@Company("Inc.")
public class Test {
}
以下代码显示了如果元素数据类型是数组,如何使用此缩写。
public @interface Item {
String[] value();
}
@Item({"A", "B"})
public class Test {
}
如果我们在数组注释类型中只指定一个元素,我们可以进一步省略大括号。
@Item("A")
public class Test {
}
如果我们在数组注释类型中只指定一个元素,我们可以进一步省略大括号。

国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码













