反射 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()});

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

那就是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});

把完整的异常信息和代码粘出来分析

Method setRunArgsMethod = curClass.getMethod("getSysConfig1", new Class[]{arg.getClass()}); 这个地方就挂了,

你应该是org.dom4j.Document.class吧

代码应该这么写啦

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

这样是得到Class类的getSysConfig1方法,应该修改为c.getMethod("getSysConfig1", new Class[]{arg.getClass()});

[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 = c.getMethod("getSysConfig1", new Class[]{arg.getClass()});
        setRunArgsMethod.invoke(c, new Object[]{arg});
    }
    catch (Exception e)         
    {
        e.printStackTrace();
    }

}   

}
[/code]