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

来源:互联网 发布:sql 日期相减 编辑:程序博客网 时间:2024/06/16 15:21

新建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;}@Overridepublic 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());// 获取注解中的值}}



原创粉丝点击