java element 获取属性-ag凯发k8国际
一:获取类上注解的值
定义注解@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);
总结
以上是ag凯发k8国际为你收集整理的java element 获取属性_java 获取类,属性变量,方法,方法参数上注解的值等的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 1803无法升级到2004_微软向win
- 下一篇: