Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69212
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-27 15:04
个人简介

记录,分享

文章分类

全部博文(43)

文章存档

2017年(24)

2015年(1)

2014年(18)

我的朋友

分类: Java

2017-03-16 11:47:26

注解的作用:
1.提供编译信息,比如挂起警告,检测错误。
2.编译、部署时的处理,比如生成代码、xml等。
3.运行时处理,比如提供运行时的检查。
除了修饰类和方法,注解还可以用在何处(JDK8以上):
1.类实例创建表达式 - new @Interned MyObject() ;
2.类型转换 - myString = (@NonNull String) str ;
3.接口实现声明 - class UnmodifiableList implements @Readonly List<@Readonly T> { ... }
4.异常声明 -  void monitorTemperature() throws @Critical TemperatureException { ... }
声明一个注解类型:
假设源码中每个类都需要写上作者日期等注释,如下
public class Generation3List extends Generation2List {
  // Author: John Doe
  // Date: 3/17/2002
  // Current revision: 6
  // Last modified: 4/12/2004
  // By: Jane Doe
  // Reviewers: Alice, Bill, Cindy
// class code goes here
}
可以用注解为这个类添加作者日期等元数据,语法如下
@Retention(RetentionPolicy.RUNTIME)  //如果希望用反射获取注解信息,必须用RUNTIME修饰
@Documented    //如果希望@CodeMeta出现在生成的javadoc里,需要在此加上@Documented.
@interface CodeMeta{
String author();
String date();
int currentRevision() default 1;
String lastModified() default "N/A";
String lastModifiedBy() default "N/A";
// Note use of array
String[] reviewers();
}
使用这个注解
@CodeMeta(
author="tonglei",
date="2016/08/15",
currentRevision=3,
lastModified="2016/08/13",
reviewers={"zhangixa","yangdinghuan"}

private static class TestType{
public static void main(String[] args) {
CodeMeta meta = TestType.class.getAnnotation(CodeMeta.class);
System.out.println(meta.author());
}
}
jdk预定义的注解:
(java代码使用的注解)
1.Deprecated
2.Override
3.SuppressWarnings - 挂起警告,("deprecation" ,"unchecked")
4.SafeVarargs - 表示该方法在使用varargs时无潜在危险
5.FunctionalInterface - JDK8引入
(用于注解的注解)
6.Retention - 指示注解如何存储
1) RetentionPolicy.SOURCE - 仅存在于源码中,编译器无视之
2) RetentionPolicy.CLASS - 存在于编译后的class文件中,但是jvm无视之
3) RetentionPolicy.RUNTIME - 存在于编译后的class文件中,被jvm识别
7. Documented
8. Target  - 限制该注解能用作用的java类型
1) ElementType.ANNOTATION_TYPE can be applied to an annotation type.
2) ElementType.CONSTRUCTOR can be applied to a constructor.
3) ElementType.FIELD can be applied to a field or property.
4) ElementType.LOCAL_VARIABLE can be applied to a local variable.
5) ElementType.METHOD can be applied to a method-level annotation.
6) ElementType.PACKAGE can be applied to a package declaration.
7) ElementType.PARAMETER can be applied to the parameters of a method.
8) ElementType.TYPE can be applied to any element of a class.
9. Inherited - 指示该注解可以是从其他超类继承而来
10.  Repeatable - 该注解可以在同一个地方重复使用,JDK8才引入


阅读(390) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~