【参考资料】
注解(Annotation)自定义注解入门http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html
个人理解,注解是作用于对象所属类的Class对象,而不是作用于某个具体的对象。
定义
可以使用public @interface XXX来定义一个注解类型,如下所示。在定义注解的时候,需要使用到元注解,关于元注解的东西放到下篇再讲。
@Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { } |
在定义的时候还可以指定他的参数,并且可以使用default来指定默认参数值,如下所示。
1、 注解参数可以使用的类型有
所有基本数据类型(int,float,boolean,byte,double,char,long,short)
String类型
Class类型
enum类型
Annotation类型
以上所有类型的数组
2、 只能使用public修饰符,或不写
3、 如果只有一个参数,一般该参数名为value,并且在后面使用的时候可以省略写value=,如@SuppressWarnings(value="all")省略写成@SuppressWarnings("all")
@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(value = RetentionPolicy.RUNTIME) public @interface CustomAnnotation {
String studentName() default "shadowfaxghh"; int age() default 0; int id() default -1;
String[] schools() default {"人民路小学", "建设路小学"}; } |
使用
public class Test {
@CustomAnnotation public void test1(){ }
@CustomAnnotation(age=19, studentName="", schools={"XXX"}) public void test2(){ } } |
解析
注解分为编译时注解和运行时注解,用途和解析也不相同,参见后面文章。
此外,Java当中提供了3个内置注解,这我们还经常遇到,如
@Override
表示一个方法打算重写父类中的另一个方法
@Override public String toString(){ return ""; } |
@Deprecated
表示已经过时,不鼓励使用这样的元素
@Deprecated public static void }
public static void main(String[] args) { } |
@SuppressWarnings
用于抑制编译时的警告信息,参数value可选的值有
1.deprecation:使用了不赞成使用的类或方法时的警告;
2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型;
3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
4.path:在类路径、源文件路径等中有不存在的路径时的警告;
5.serial:当在可序列化的类上缺少serialVersionUID 定义时的警告;
6.finally:任何 finally 子句不能正常完成时的警告;
7.all:关于以上所有情况的警告。
@SuppressWarnings("all") // @SuppressWarnings(value={"unchecked", "deprecation"}) public static void test2(){ List list=new ArrayList(); } |