我们实现一个方法的反射.
User类:
public class User { private String name; @Override public String toString() { return "User [name=" + name + "]"; } public String say(String str) { return name+ " say " + str; } }
我们实现的方法调用:
User user = User.class.newInstance(); Field name = User.class.getDeclaredField("name"); //由于这个属性时私有的,需要重新设置访问权限 name.setAccessible(true); name.set(user, "trek"); //获取方法 Method method = User.class.getDeclaredMethod("say", String.class); //实现方法的调用 String retval = (String) method.invoke(user, "今天不错"); System.out.println(retval);
现在我们实现了方法的调用.
在这里我们总结一下反射的基本使用结构:
[1]获取Class对象
[2]获得Constructor Field Method 对象
[3]通过获取的这一些反射附属的对象,进行使用.
另外,还有package annotation 等元素.
使用方式也基本一致.