欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程资源 > 编程问答 >内容正文

编程问答

java element 获取属性-凯发k8官方网

发布时间:2024/10/14 编程问答 7 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 java element 获取属性_java 获取类,属性变量,方法,方法参数上注解的值等 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一:获取类上注解的值

定义注解@target(elementtype.type)用于类,接口等

@target(elementtype.type)

@retention(retentionpolicy.runtime)

public @interface orange {

string getname();

string getvalue();

}

获取

@orange(getname = "3333",getvalue = "4444")

public class parameternametest {

。。。

@test

public void main() throws exception {

class clazz = parameternametest.class;

if(clazz.isannotationpresent(orange.class)){

// 获取 "类" 上的注解

orange getannotation = clazz.getannotation(orange.class);

system.out.println("\"类\"上的注解值获取到第一个 :"

getannotation.getname() ",第二个:" getannotation.getvalue());

}

}

返回

"类"上的注解值获取到第一个 :3333,第二个:4444

二:获取属性变量上注解的值

定义注解@target(elementtype.field)用于属性变量

@target(elementtype.field)

@retention(retentionpolicy.runtime)

public @interface banana {

string length();

string price();

}

获取

public class parameternametest {

@banana(length = "6666", price = "$888")

string something = "other information";

@test

public void main() throws exception {

class clazz = parameternametest.class;

// 获取 "属性变量" 上的注解的值

field[] fields = clazz.getdeclaredfields();

for(field field: fields){

if(field.isannotationpresent(banana.class)){

banana bananaannotation = field.getannotation(banana.class);

system.out.println("\"属性变量\"上的注解值获取到第一个 :"

bananaannotation.length() ",第二个:" bananaannotation.price());

}

}

}

}

返回

"属性变量"上的注解值获取到第一个 :6666,第二个:$888

三: 获取方法上注解的值

@target(elementtype.method)

@retention(retentionpolicy.runtime)

public @interface apple {

string color();

string number();

}

获取

public class parameternametest {

@apple(color = "红色", number = "5555")

public void method1(){

// ...

}

@test

public void main() throws exception {

class clazz = parameternametest.class;

// 获取 "方法"上的注解的值

method[] methods = clazz.getdeclaredmethods();

for (method method: methods){

if(method.isannotationpresent(apple.class)){

apple appleannotation = method.getannotation(apple.class);

system.out.println("\"方法\"上的注解值获取到第一个 :"

appleannotation.color() ",第二个:" appleannotation.number());

}

}

}

}

返回

"方法"上的注解值获取到第一个 :红色,第二个:5555

三: 获取" 方法参数 " 上注解的值

@target(elementtype.parameter)

@retention(retentionpolicy.runtime)

@documented

public @interface cherry {

string value();

}

获取

public class parameternametest {

public void method2(@cherry("1111") string param1, @cherry("2222") string param2) {

system.out.println(param1 param2);

}

@test

public void main() throws exception {

class clazz = parameternametest.class;

// 获取 "方法参数" 上的注解的值

method method = clazz.getdeclaredmethod("method2", string.class, string.class);

string[] parameternames = getmethodparameternamesbyannotation(method);

system.out.println("\"方法参数\"上的注解值获取到" arrays.tostring(parameternames));

}

/**

* 获取给 "方法参数" 进行注解的值

*

* @param method 要获取参数名的方法

* @return 按参数顺序排列的参数名列表

*/

public static string[] getmethodparameternamesbyannotation(method method) {

annotation[][] parameterannotations = method.getparameterannotations();

if (parameterannotations == null || parameterannotations.length == 0) {

return null;

}

string[] parameternames = new string[parameterannotations.length];

int i = 0;

for (annotation[] parameterannotation : parameterannotations) {

for (annotation annotation : parameterannotation) {

if (annotation instanceof cherry) {

cherry param = (cherry) annotation;

parameternames[i ] = param.value();

}

}

}

return parameternames;

}

}

返回

"方法参数"上的注解值获取到[1111, 2222]

小结:主要使用的api是class类中的实现接口annotatedelement的方法

isannotationpresent --- 检测该元素是否被对应注解修饰

default boolean isannotationpresent(class extends annotation> annotationclass) {

return getannotation(annotationclass) != null;

}

getannotation --- 获取注解对象

t getannotation(class annotationclass);

总结

以上是凯发k8官方网为你收集整理的java element 获取属性_java 获取类,属性变量,方法,方法参数上注解的值等的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图