java

位置:IT落伍者 >> java >> 浏览文章

java反射Annotation


发布日期:2023年10月25日
 
java反射Annotation

import javalangannotationAnnotation;

import javalangannotationElementType;

import javalangannotationRetention;

import javalangannotationRetentionPolicy;

import javalangannotationTarget;

import javalangreflectConstructor;

import javalangreflectField;

import javalangreflectMethod;

@Target(ElementTypeCONSTRUCTOR)

// 用于构造方法

@Retention(RetentionPolicyRUNTIME)

// 在运行时加载到Annotation到JVM中(这个一定不能丢掉否则在getAnnotation的时候取不到!!!)

@interface Constructor_Annotation {

String value() default 默认构造方法; // 定义一个具有默认值的String型成员

}

@Target( { ElementTypeFIELD ElementTypeMETHOD ElementTypePARAMETER })

// 用于字段方法参数

@Retention(RetentionPolicyRUNTIME)

// 在运行时加载到Annotation到JVM中

@interface Field_Method_Parameter_Annotation {

Class type() default voidclass; // 定义一个具有默认值的Class型成员

String describ(); // 定义一个没有默认值的String成员

}

public class AnnotationTest {

@Field_Method_Parameter_Annotation(describ = 字段编号 type = intclass)

// 注释字段

int id;

@Field_Method_Parameter_Annotation(describ = 字段姓名 type = Stringclass)

// 注释字段

String name;

@Constructor_Annotation()

// 采用默认构造方法

public AnnotationTest() {

}

@Constructor_Annotation(立即初始化构造方法)

// 注释构造方法

public AnnotationTest(

// 注释构造方法参数

@Field_Method_Parameter_Annotation(describ = 编号 type = intclass) int id @Field_Method_Parameter_Annotation(describ = 姓名 type = Stringclass) String name) {

thisid = id;

thisname = name;

}

@Field_Method_Parameter_Annotation(describ = 获得编号 type = intclass)

public int getId() {

return id;

}

@Field_Method_Parameter_Annotation(describ = 设置编号)

// 成员type采用默认注释方法

public void setId(

// 注释参数

@Field_Method_Parameter_Annotation(describ = 设置编号 type = intclass) int id) {

thisid = id;

}

@Field_Method_Parameter_Annotation(describ = 获得姓名 type = Stringclass)

public String getName() {

return name;

}

@Field_Method_Parameter_Annotation(describ = 设置姓名)

public void setName(@Field_Method_Parameter_Annotation(describ = 姓名 type = Stringclass) String name) {

thisname = name;

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Autogenerated method stub

// 构造方法

Constructor[] declaredConstructor = AnnotationTestclassgetDeclaredConstructors(); // 获得所有的构造方法

for (int i = ; i < declaredConstructorlength; i++) {

Constructor constructor = declaredConstructor[i]; // 遍历构造方法

if (constructorisAnnotationPresent(Constructor_Annotationclass)) // 查看是否指定类型的注释

{

Constructor_Annotation ca = (Constructor_Annotation) constructorgetAnnotation(Constructor_Annotationclass);

Systemoutprintln(cavalue()=: + cavalue());

}

Annotation[][] parameterAnnotations = constructorgetParameterAnnotations();// 获得参数注释

for (int j = ; j < parameterAnnotationslength; j++) {

int length = parameterAnnotations[j]length;

if (length == ) // 如果为则表示没有为该参数添加注释

{

Systemoutprintln(没有为该参数添加注释);

} else {

for (int k = ; k < length; k++) {

// 获得参数注释

Field_Method_Parameter_Annotation pa = (Field_Method_Parameter_Annotation) parameterAnnotations[j][k];

Systemoutprint( + padescrib()); // 参数描述

Systemoutprintln( + patype()); // 参数类型

}

}

}

Systemoutprintln(****************);

}

// 字段

Systemoutprintln(********字段的Annotation*************);

Field[] declaredFields = AnnotationTestclassgetDeclaredFields(); // 获得所有的字段

for (int i = ; i < declaredFieldslength; i++) {

Field field = declaredFields[i];

// 查看是否具有指定类型的注释

if (fieldisAnnotationPresent(Field_Method_Parameter_Annotationclass)) {

Field_Method_Parameter_Annotation fa = (Field_Method_Parameter_Annotation) fieldgetAnnotation(Field_Method_Parameter_Annotationclass);

Systemoutprint( + fadescrib()); // 获得字段描述

Systemoutprintln( + fatype()); // 获得字段类型

}

}

// 方法

Systemoutprintln(********方法的Annotation*************);

Method[] methods = AnnotationTestclassgetDeclaredMethods(); // 获得所有的方法

for (int i = ; i < methodslength; i++) {

Method method = methods[i];

// 查看是否指定注释

if (methodisAnnotationPresent(Field_Method_Parameter_Annotationclass))

{

Field_Method_Parameter_Annotation ma = (Field_Method_Parameter_Annotation) methodgetAnnotation(Field_Method_Parameter_Annotationclass);

Systemoutprint( + madescrib()); // 获得方法描述

Systemoutprintln( + matype()); // 获得方法类型

}

Annotation[][] parameterAnnotations = methodgetParameterAnnotations(); // 获得所有参数

for (int j = ; j < parameterAnnotationslength; j++) {

int length = parameterAnnotations[j]length;

if (length == ) {

Systemoutprintln(没有添加Annotation参数);

} else {

for (int k = ; k < length; k++) {

// 获得指定的注释

Field_Method_Parameter_Annotation pa = (Field_Method_Parameter_Annotation) parameterAnnotations[j][k];

Systemoutprint( + padescrib()); // 获得参数描述

Systemoutprintln( + patype()); // 获得参数类型

}

}

}

Systemoutprintln(********************);

}

}

}

               

上一篇:java监听文件Error listenerStart错误

下一篇:深入Java核心:JVM中的栈和局部变量