java注解试用及通过反射读取值
来源:互联网 发布:怎么用matlab编程 编辑:程序博客网 时间:2024/06/11 05:33
创建一个注解接口
@Target({java.lang.annotation.ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Fruit {
public abstract String name() default "";// 默认值为“”
}
@Target是注解类型
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。
作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
取值(RetentionPoicy)有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)
第二步
用Java反射写一个工具类读取注解
public class AnUtils {
public static void getFruitInfo(Class<?> clazz){
String strFruitName=" 水果名称:";
Field[] fields = clazz.getDeclaredFields();
//@Target=FIELD 运行
for(Field field :fields){
if(field.isAnnotationPresent(Fruit.class)){
Fruit fruitName = (Fruit) field.getAnnotation(Fruit.class);
strFruitName=strFruitName+fruitName.name();
System.out.println(strFruitName);
}
}
// //@Target=TYPE 运行
if(clazz.isAnnotationPresent(Fruit.class)){
Fruit fruitName = (Fruit) clazz.getAnnotation(Fruit.class);
strFruitName=strFruitName+fruitName.name();
System.out.println(strFruitName);
}
}
}
第三步
写个测试类
在 @Target=TYPE时
@Fruit(name="123")
public class AnnotionTest {
public static String name;
public static void main(String[] args) {
AnUtils.getFruitInfo(AnnotionTest.class);
}
}
输出: 水果名称:123
在 @Target=FIELD时
public class AnnotionTest {
@Fruit(name="123")
public static String name;
public static void main(String[] args) {
AnUtils.getFruitInfo(AnnotionTest.class);
}
}
第一步
创建一个注解接口
@Target({java.lang.annotation.ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Fruit {
public abstract String name() default "";// 默认值为“”
}
@Target是注解类型
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。
作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
取值(RetentionPoicy)有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)
第二步
用Java反射写一个工具类读取注解
public class AnUtils {
public static void getFruitInfo(Class<?> clazz){
String strFruitName=" 水果名称:";
Field[] fields = clazz.getDeclaredFields();
//@Target=FIELD 运行
for(Field field :fields){
if(field.isAnnotationPresent(Fruit.class)){
Fruit fruitName = (Fruit) field.getAnnotation(Fruit.class);
strFruitName=strFruitName+fruitName.name();
System.out.println(strFruitName);
}
}
// //@Target=TYPE 运行
if(clazz.isAnnotationPresent(Fruit.class)){
Fruit fruitName = (Fruit) clazz.getAnnotation(Fruit.class);
strFruitName=strFruitName+fruitName.name();
System.out.println(strFruitName);
}
}
}
第三步
写个测试类
在 @Target=TYPE时
@Fruit(name="123")
public class AnnotionTest {
public static String name;
public static void main(String[] args) {
AnUtils.getFruitInfo(AnnotionTest.class);
}
}
输出: 水果名称:123
在 @Target=FIELD时
public class AnnotionTest {
@Fruit(name="123")
public static String name;
public static void main(String[] args) {
AnUtils.getFruitInfo(AnnotionTest.class);
}
}
创建一个注解接口
@Target({java.lang.annotation.ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Fruit {
public abstract String name() default "";// 默认值为“”
}
@Target是注解类型
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。
作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
取值(RetentionPoicy)有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)
第二步
用Java反射写一个工具类读取注解
public class AnUtils {
public static void getFruitInfo(Class<?> clazz){
String strFruitName=" 水果名称:";
Field[] fields = clazz.getDeclaredFields();
//@Target=FIELD 运行
for(Field field :fields){
if(field.isAnnotationPresent(Fruit.class)){
Fruit fruitName = (Fruit) field.getAnnotation(Fruit.class);
strFruitName=strFruitName+fruitName.name();
System.out.println(strFruitName);
}
}
// //@Target=TYPE 运行
if(clazz.isAnnotationPresent(Fruit.class)){
Fruit fruitName = (Fruit) clazz.getAnnotation(Fruit.class);
strFruitName=strFruitName+fruitName.name();
System.out.println(strFruitName);
}
}
}
第三步
写个测试类
在 @Target=TYPE时
@Fruit(name="123")
public class AnnotionTest {
public static String name;
public static void main(String[] args) {
AnUtils.getFruitInfo(AnnotionTest.class);
}
}
输出: 水果名称:123
在 @Target=FIELD时
public class AnnotionTest {
@Fruit(name="123")
public static String name;
public static void main(String[] args) {
AnUtils.getFruitInfo(AnnotionTest.class);
}
}第一步
创建一个注解接口
@Target({java.lang.annotation.ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Fruit {
public abstract String name() default "";// 默认值为“”
}
@Target是注解类型
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。
作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
取值(RetentionPoicy)有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)
第二步
用Java反射写一个工具类读取注解
public class AnUtils {
public static void getFruitInfo(Class<?> clazz){
String strFruitName=" 水果名称:";
Field[] fields = clazz.getDeclaredFields();
//@Target=FIELD 运行
for(Field field :fields){
if(field.isAnnotationPresent(Fruit.class)){
Fruit fruitName = (Fruit) field.getAnnotation(Fruit.class);
strFruitName=strFruitName+fruitName.name();
System.out.println(strFruitName);
}
}
// //@Target=TYPE 运行
if(clazz.isAnnotationPresent(Fruit.class)){
Fruit fruitName = (Fruit) clazz.getAnnotation(Fruit.class);
strFruitName=strFruitName+fruitName.name();
System.out.println(strFruitName);
}
}
}
第三步
写个测试类
在 @Target=TYPE时
@Fruit(name="123")
public class AnnotionTest {
public static String name;
public static void main(String[] args) {
AnUtils.getFruitInfo(AnnotionTest.class);
}
}
输出: 水果名称:123
在 @Target=FIELD时
public class AnnotionTest {
@Fruit(name="123")
public static String name;
public static void main(String[] args) {
AnUtils.getFruitInfo(AnnotionTest.class);
}
}
输出: 水果名称:123
- java注解试用及通过反射读取值
- Java--注解及反射读取注解
- java再复习——通过反射读取注解
- java 通过反射获取注解
- java 通过反射获取注解
- java之通过反射获取类中的注解值
- Java通过反射获取自定义注解
- Java 反射读取配置文件及反射类
- java中自定义注解并通过反射获取注解属性值
- java中自定义注解并通过反射获取注解属性值
- java中自定义注解并通过反射获取注解属性值
- java中自定义注解并通过反射获取注解属性值
- java 自定义注解annotation和通过反射获取注解
- 使用反射读取注解
- java中通过反射遍历属性字段及值
- android 自定义注解 通过反射获取注解属性值
- java通过反射+注解获取两个对象改变的内容
- 20150804-反射及注解
- List转实体类
- 自定义View 细节点记录
- PHP7.0微信公众平台开发6: 实例三:群发预览消息
- 86D(莫队算法)
- sublime text中<script type="text/ecmascript-6">如何代码高亮并支持语法?
- java注解试用及通过反射读取值
- JS常用函数使用指南
- 多源最短路径-Floyd-Warshall—C
- Win7x64+VS2015Pro+Matlab2016b+OpenCV3.2配置运行TLD
- UISegementControl
- Dagger2
- 孙子问题-中国剩余定理
- EventBus3.0最容易理解的源码解析
- 拥有确认和取消两个按钮的提示框