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处理器。