首页 / JAVA / Java通过反射获取Method方法
Java通过反射获取Method方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java通过反射获取Method方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3453字,纯文字阅读大概需要5分钟。
内容图文
1. 创建GFather祖先类,Father父类并且继承GFather类,Son子类并且继承父类。
package reflection.commen;
public class GFather {
public int g_age = 1;
public String g_name = "爷爷";
public GFather(){
}
public GFather(int age, String name) {
this.g_age = age;
this.g_name = name;
}
public int getG_age() {
return g_age;
}
private void setG_age(int g_age) {
this.g_age = g_age;
}
}
package reflection.commen;
public class Father extends GFather {
private int f_age;
public String f_name;
public Father(){
}
public Father(int father_age, String father_name) {
super();
this.f_age = father_age;
this.f_name = father_name;
}
public int getF_age() {
return f_age;
}
private void setF_age(int f_age) {
this.f_age = f_age;
}
}
package reflection.commen;
import reflection.commen.Father;
public class Son extends Father {
private int s_age;
public String s_name;
public Son(){
}
public Son(int son_age, String son_name, int f_age, String f_name) {
super(f_age,f_name);
this.s_age = son_age;
this.s_name = son_name;
}
public int getS_age() {
return s_age;
}
private void setS_age(int s_age) {
this.s_age = s_age;
}
}
2. getDeclaredMethod(String name, Class<?>… parameterTypes)获取本类定义定义的方法,传入的参数是方法名 + 反射出的方法的形参类型。该方法只能获取本类的所有方法,不能获取祖先类的。
@Test
public void test1() throws Exception{
Son son = new Son(3,"儿子",2,"父亲");
Method set = Class.forName("reflection.commen.Son").getDeclaredMethod("setS_age", int.class); //setS_age(int age) 所以第二个参数是int.class
Method get = Class.forName("reflection.commen.Son").getDeclaredMethod("getS_age");
set.setAccessible(true);
set.invoke(son,100);
System.out.println(get.invoke(son));
}
3. getMethod(String name, Class<?>… parameterTypes)获取本类定义定义的方法,传入的参数是方法名 + 反射出的方法的形参类型。只能获取所有的public方法
@Test
public void test2() throws Exception{
Son son = new Son(3,"儿子",2,"父亲");
Method gets = Class.forName("reflection.commen.Son").getMethod("getS_age");
Method getf = Class.forName("reflection.commen.Son").getMethod("getF_age");
Method getg = Class.forName("reflection.commen.Son").getMethod("getG_age");
System.out.println(gets.getName() + " -> " + gets.invoke(son));
System.out.println(getf.getName() + " -> " + getf.invoke(son));
System.out.println(getg.getName() + " -> " + getg.invoke(son));
Method sets = Class.forName("reflection.commen.Son").getMethod("setS_age",int.class);
sets.setAccessible(true);
sets.invoke(son,50); //修改s_age = 50;
System.out.println(gets.getName() + " -> " + gets.invoke(son));
}
4. getDeclaredMethods()获取本类所有的方法,注意区分不同方法需要传入的参数类型。否则会出现异常问题。
@Test
public void test3() throws Exception{
Son son = new Son(3,"儿子",2,"父亲");
Method[] methods = Class.forName("reflection.commen.Son").getDeclaredMethods();
for(Method m : methods){
m.setAccessible(true);
if(m.getName().equals("setS_age")){ //区分不同函数
m.invoke(son,50); //设置s_age = 50
}
else{
m.invoke(son);
}
System.out.println(m.getName());
}
}
5. getMethods()方法获取子类 + 父类所有的public方法,并且由于所有类的老祖宗都是Object类,因此获得的方法包括object超类的方法。
@Test
public void test4() throws Exception{
Son son = new Son(3,"儿子",2,"父亲");
Method[] methods = Class.forName("reflection.commen.Son").getMethods();
System.out.println(methods.length);
for(Method m : methods){
System.out.println(m.toString());
}
}
6. 这里并没有static方法的调用过程,由于static方法比较特殊是一个静态方法,在使用invoke调用的时候不需要传入对象,因为static方法不属于任何一个实例化对象。
内容总结
以上是互联网集市为您收集整理的Java通过反射获取Method方法全部内容,希望文章能够帮你解决Java通过反射获取Method方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。