Java千百问_03基础语法(021)_如何自定义注解
2016-07-09 09:48
567 查看
点击进入_更多_Java千百问color=”#ff0000”
了解注释看这里:注释是什么
我们自定义注解需要使用@interface关键字,具体语法如下:
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。
@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型。通过default来声明参数的默认值,如果不指定default,则说明该参数为必填。
注解参数(注解方法的返回值)的只能用public或默认(default)这两个访问权修饰,并且只支持以下数据类型:
所有基本数据类型(int,float,boolean,byte,double,char,long,short)
String类型
Class类型
enum类型
Annotation类型
以上所有类型的数组
我们一般是用反射来获取注解,一个简单的自定义注解和使用注解实例:
注解类:
被注解的类:
使用注解:
我们运行后结果如下:
其中注解类中的注解@Retention(RetentionPolicy.RUNTIME),是用来修饰注解的注解,即元注解,用来描述和限定自定义注解的使用场景和约束。具体如下:
了解元注解看这里:[元注解是什么][3]
[3]:
1、如何自定义注解
要学习使用注解,我们需要了解注解,并且了解java提供的常见注解。更重要的是学会自定义注解。了解注释看这里:注释是什么
我们自定义注解需要使用@interface关键字,具体语法如下:
public @interface 注解名 {定义体} default {默认值}
使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。
@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型。通过default来声明参数的默认值,如果不指定default,则说明该参数为必填。
注解参数(注解方法的返回值)的只能用public或默认(default)这两个访问权修饰,并且只支持以下数据类型:
所有基本数据类型(int,float,boolean,byte,double,char,long,short)
String类型
Class类型
enum类型
Annotation类型
以上所有类型的数组
我们一般是用反射来获取注解,一个简单的自定义注解和使用注解实例:
注解类:
@Retention(RetentionPolicy.RUNTIME) public @interface TestAnnotation { String name() default ""; }
被注解的类:
public class TestInfo { @TestAnnotation(name = "公司名称") private String company; @TestAnnotation(name = "职位") private String position; }
使用注解:
public class TestMain { public static void main(String[] args) { Field[] fields = TestInfo.class.getDeclaredFields(); for (Field field : fields) { if (field.isAnnotationPresent(TestAnnotation.class)) { TestAnnotation testAnnotation = (TestAnnotation) field.getAnnotation(TestAnnotation.class); System.out.println("field:" + field.getName() + ", annotation:" + testAnnotation.name()); } } } }
我们运行后结果如下:
field:company, annotation:公司名称 field:position, annotation:职位
其中注解类中的注解@Retention(RetentionPolicy.RUNTIME),是用来修饰注解的注解,即元注解,用来描述和限定自定义注解的使用场景和约束。具体如下:
了解元注解看这里:[元注解是什么][3]
[3]:
相关文章推荐
- eclipse创建springmvc+maven+junit4 web 项目
- java 排序
- java servlet 搭建简易的服务器
- java堆栈区别
- javax.servlet.ServletException: Filter execution threw an exception
- 深入理解Java的接口和抽象类
- Java千百问_01基本概念(017)_内存物理地址在CPU中如何形成
- Kryonet client disconnects after send a packet to server (java)
- Java之继承与多态
- 110---Spring的注解总结
- 如何破解Myeclipse
- 【Java核心技术 I】第三章 Java的基本程序设计结构
- intellij idea 创建springmvc4+mybtais3+maven+junit4 web项目
- Java千百问_08JDK详解(017)_Javadoc是什么
- Java-HDFS 整合 上传 下载 删除
- java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class andro
- 韩顺平.循序渐进学.java.从入门到精通迅雷资源下载地址
- rxjava几个关键类的类图
- 第4章 对象与类
- Thinking in Java 第14章 类型信息