您的位置:首页 > 编程语言 > Java开发

Java反射获取方法,执行方法,获取注解

2017-11-16 15:29 344 查看
新建Person类:

package test.reflection.cal;

import test.reflection.annotation.AnnoTest;

/**
* 用于测试反射的类
* @author Administrator
*
*/
public class Person {

private int id;
private String name;

// public Person(){}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

/**
* 待测试的方法
* private 修饰
* 带注解
* @param i
* @return
*/
@AnnoTest(value = "what",name = "are you doing")
private String changeInfo(String i){
return i+" "+name;
}

@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + "]";
}

}


新建注解:

package test.reflection.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 自定义注解
* @author Administrator
*
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnoTest {

String name() default "this is an annotation";

String value() default "";

}


测试类:

package test.reflection.test;

import java.lang.reflect.Method;

import test.reflection.annotation.AnnoTest;
import test.reflection.cal.Person;

/**
* 反射测试
*
* @author Administrator
*
*/
public class ReflectionTest {

@SuppressWarnings("unchecked")
public static void main(String[] args) throws Throwable, SecurityException {

Person p = new Person();
Class<Person> clazz = (Class<Person>) p.getClass();
// 获取所有的方法
Method[] methods = clazz.getDeclaredMethods();
System.out.println("Person 的所有方法:");
for (Method method : methods) {
System.out.println("" + method.getName());
}
System.out.println();
// 获取getName方法,没有赋初值,结果为null
Method m0 = clazz.getDeclaredMethod("getName");
System.out.println("getName: " + m0.invoke(p));
// 获取setName方法
Method mset = clazz.getDeclaredMethod("setName", String.class);
mset.invoke(p, "dam");

System.out.println("setName之后 " + p.toString());
// 获取changeInfo 方法
Method m1 = clazz.getDeclaredMethod("changeInfo", String.class);
m1.setAccessible(true);// changeInfo方法用private修饰 ,这里需要设置为true才能获取
String res = (String) m1.invoke(p, " haha");
System.out.println("changeInfo:" + res);

// 获取changeInfo 方法上的注解
AnnoTest annoTest = (AnnoTest) m1.getAnnotation(AnnoTest.class);
System.out.println(annoTest.name());// 获取注解中的值
System.out.println(annoTest.value());// 获取注解中的值

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐