wild84 2017-04-12 03:05 采纳率: 81.8%
浏览 1755
已采纳

java使用反射调用类方法

我现在的程序如下:

 public class Ob {
    private String classPath;
    private String methodName;
    private Map<String, Object> para;

}
class Demo2 {
    public void print(String string) {
        System.out.print(string+"demo2");
    }
}
class Demo {
    public void print(String string,int i) {
        System.out.print(string+i+"demo1");
    }
}

我想编写一个方法:它接收ob对象,根据ob对象的属性反射调用其他类的方法,调用的实参由ob的para获得. 我想到的是使用map设置实参,或者你有更好的办法也可以.
请问如何实现?可以帮我完成这个demo么?

  • 写回答

5条回答 默认 最新

  • 吾日三省Java 2017-04-12 11:22
    关注

    public static void main(String[] args) throws Exception {
    // Ob ob = new Ob("test.pd.Demo2","print","hahaha");
    Ob ob = new Ob("test.pd.Demo","print","hahaha",25);
    Class<?> cal = Class.forName(ob.getClassPath());
    System.out.println("cal:"+cal);
    Object[] params = ob.getPara();
    List> cals = new ArrayList>(params.length);
    for (Object param : params) {
    cals.add(param.getClass());
    }
    Method method = cal.getMethod(ob.getMethodName(),cals.toArray(new Class[]{}));
    System.out.println(method);
    method.invoke(cal.newInstance(),params);
    }

    注意:将public void print(String string,int i)修改为public void print(String string,Integer i)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 Mac(标签-IDE|关键词-File) idea
  • ¥15 潜在扩散模型的Unet特征提取
  • ¥15 iscsi服务无法访问,如何解决?
  • ¥15 感应式传感器制作的感应式讯响器