永发信息网

求教Java里面如何反射invoke父类的overriden方法

答案:1  悬赏:30  手机版
解决时间 2021-03-13 11:30
求教Java里面如何反射invoke父类的overriden方法
最佳答案
import java.lang.reflect.Method;

public class InvokeTest {

public static void main(String[] args) {
Class clazz;
Object obj;
try {
InvokeTest it = new InvokeTest();
clazz = Class.forName("com.test.invoke.User");
obj = clazz.newInstance();

Param p = new Param();
p.setMethodName("introduction");
p.setParamTypes(new Class[]{String.class,int.class});
p.setParamValuese(new Object[]{"Tom",20});
Object result = it.call(obj, p);
System.out.println(result+"");

} catch (Exception e) {
e.printStackTrace();
}

}


public Object call(Object declareCLass, Param param) throws Exception {
Class clazz = declareCLass.getClass(); //获取class对象
String name = param.getMethodName(); //从param类中获取调用方法名
Class[] methodParamTypes = param.getParamTypes(); //从param类中获取调用方法参数类型
Object[] objs = param.getParamValuese(); //从param类中获取调用方法参数值
Method method = clazz.getDeclaredMethod(name, methodParamTypes); //通过class对象获取对应的方法
return method.invoke(declareCLass, objs); //invoke调用方法,传入 classInstance、 参数值
}

}


class Param {
private String methodName;

private Class[] paramTypes;

private Object[] paramValuese;

public String getMethodName() {
return methodName;
}

public void setMethodName(String methodName) {
this.methodName = methodName;
}

public Class[] getParamTypes() {
return paramTypes;
}

public void setParamTypes(Class[] paramTypes) {
this.paramTypes = paramTypes;
}

public Object[] getParamValuese() {
return paramValuese;
}

public void setParamValuese(Object[] paramValuese) {
this.paramValuese = paramValuese;
}
}

class User {

private String name;

private int age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
System.out.println("called method setName value = " + name);
}

public int getAge() {
return age;
}

public void setAge(int age) {
System.out.println("called method setAge value = " + age);
this.age = age;
}

public String introduction(String name,int age){
return "My name is "+name+". I'm "+age+" years old.";
}

}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
劳动仲裁中当事人举证要注意什么,仲裁举证时
通过路口减速要踩离合吗
屈服强度符号σ右下角的小5怎么打出来
我的PSP如何换壁纸
煜丰兽药饲料添加剂经营部怎么去啊,有知道地
求psv舰c改 主线攻略。 要中文
2002年的阴历二月初六这天是阳历的几号
DNF辅助在哪里买比较靠谱啊?
临资口这地名有多少年了
中国移动手机专卖店亚洲店地址有知道的么?有
她若不在我身边,我要这霸业又有何用
《兔死狐悲》相关文言文
中国光大银行文化路支行在什么地方啊,我要过
两个导线通电流,且电流一个为i一个为2i,它
五个字的电影有哪些
推荐资讯
长荣布行怎么去啊,有知道地址的么
马自达3跑高速后发现机油少了是啥原因
树叶瓜果蔬菜干果调料店NO.008在哪里啊,我有
将一个物体分别放在A、B两个凸透镜前相同的距
红遍天服饰广场洪山店在什么地方啊,我要过去
考研英语二和英语一难度有多大差距?如果英语
我的家地址有知道的么?有点事想过去
东然路/光明街(路口)地址有知道的么?有点事
柳江火车站怎么去啊,有知道地址的么
婴之美好世界时尚孕婴连锁南小区店我想知道这
广东泽银建材实业有限公司在什么地方啊,我要
恩施土司城是什么朝代建的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?