WelcomeGetFun 2009-10-15 13:34
浏览 311
已采纳

反射 getMethod 能否传递Object 型参数 ?

[code="java"]
String b = "1111";
Object args = (Object)b;
Method setRunArgsMethod = curClass.getMethod("testArgs", new Class[]{args.getClass()});
[/code]

调用的方法: public void testArgs(Object a) 实际参数是String, 如果函数定义写成 String a, 就没问题,写成Object a, 就有异常 java.lang.NullPointerException
[b]问题补充:[/b]
[code="java"]
import org.dom4j.Document;
import org.jconfig.Configuration;
public interface ConvertMessage
{
public Boolean getSysConfig1(Document sysConfig);
}

public class A8 implements ConvertMessage
{
public Boolean getSysConfig1(Document sysConfig)
{

return true;

}
}
[/code]

[code="java"]
import java.lang.reflect.*;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
public class test
{

public static void main(String[] args)
{
    try
    {
        Class curClass = Class.forName("process.test.A8");
        Object c = curClass.newInstance();

        Document arg = DocumentHelper.createDocument();
        //String arg = "111";
        Method setRunArgsMethod = curClass.getMethod("getSysConfig1", new Class[]{arg.getClass()});
        setRunArgsMethod.invoke(c, new Object[]{arg});
    }
    catch (Exception e)         
    {
        e.printStackTrace();
    }

}   

}

[/code]

[code="java"]
ava.lang.NoSuchMethodException: process.test.A8.getSysConfig1(org.dom4j.tree.DefaultDocument)
at java.lang.Class.getMethod(Class.java:1605)
at test.main(test.java:16)
[/code]
[b]问题补充:[/b]

[code]
Method[] m = curClass.getMethods();
for(int i=0; i<m.length; i++)
{
System.out.println(m[i]);
}
[/code]

打印出方法清单,证明是有的:
public java.lang.Boolean process.test.A8.getSysConfig1(org.dom4j.Document)
[b]问题补充:[/b]
c.getMethod("getSysConfig1", new Class[]{arg.getClass()});

这样写不对,编译都过不去

  • 写回答

4条回答 默认 最新

  • wanghaolovezlq 2009-10-15 15:38
    关注

    那就是org.dom4j.tree.DefaultDocument的问题导致了

    Method setRunArgsMethod = curClass.getMethod("getSysConfig1", new Class[]{arg.getClass()});

    这里不要用arg.getClass(),用确定的类org.dom4j.Document.class
    Method setRunArgsMethod = curClass.getMethod("getSysConfig1", new Class[]{org.dom4j.Document.class});

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题