Java SE5内置了3种注解
@Override,表示当前的方法定义将覆盖父类中的方法。
@Deprecated,表示如果程序员使用了注解为它的元素,那么编译器会发出警告信息。
@SuppressWarnings,关闭不当的编译器警告信息。在JSE5中也可以使用这个直接,不过会背忽略不起作用。
定义注解
package prosion.annotations.stady.basics.anntotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface SQLInteger { String name() default ""; Constraints constaunts() default @Constraints; }
package prosion.annotations.stady.basics.anntotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** *生成数据库表 * */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface DBTable { public String name() default ""; }
package prosion.annotations.stady.basics.anntotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface SQLString { int value() default 0; String name() default ""; Constraints constaunts() default @Constraints; }
@Target
表示该注解可以应用于什么地方,可能的 ElementType 参数包括:
CONSTRUCTOR :构造器的声明
FIELD :域声明(包括 enum 实例)
LOCAL_VARIABLE :局部变量声明
METHOD :方法声明
PACKAGE :包声明
PARAMETER: 参数声明
TYPE :类,接口(包括注解类型)或者 enum 声明
@Retention
表示在什么级别保存该注解信息,可选的 RetentionPolicy 参数包括
SOURCE :注解将被编译器丢弃
CLASS :注解在 class 文件中可用,但会被 vm 丢弃
RUNTIME : vm 将在运行期也保留直接,因此可以通过反射机制来读取注解的信息。
@Decumented
将此注解包含在 Javadoc 中
@Interited
允许子类继承父类中的主角诶
注解元素支持的类型:
如果使用支持以外的类型编译器会报错。注意不允许使用任何包装类型 , 元素不能是个不确定的值,就是说要么提供默认值,要么在使用注解时给元素赋值。
所有基本类型( int,float,boolean 等)
String
Class
Enum
Annotation
使用注解
package prosion.annotations.stady.basics; import prosion.annotations.stady.basics.anntotations.Constraints; import prosion.annotations.stady.basics.anntotations.DBTable; import prosion.annotations.stady.basics.anntotations.SQLInteger; import prosion.annotations.stady.basics.anntotations.SQLString; @DBTable(name="Member") public class Member { @SQLString(20) String firstName; @SQLString(50) String lastName; @SQLInteger Integer age; @SQLString(value=30,constaunts = @Constraints(primarykey=true)) String handle; static int memberCount; public String getHandle(){ return handle; } public String getFirstName(){ return firstName; } public String getLastName(){ return lastName; } public String toString(){ return handle; } public Integer getAge(){ return age; } }
声明完注解后,需要实现直接处理器才可以使用。如sun公司提供的apt处理器。