Java中的getDeclaredMethod失败

时间:2014-11-27 07:50:59

标签: java

我有一个批处理应用程序,它使用带有方法名称的文件输入,然后名称用于按设计执行具有相同名称的方法。

例如,File有getTemperature,然后在类中执行getTemperature。

我正在使用以下Java:

java version "1.7.0_55"
OpenJDK Runtime Environment (IcedTea 2.4.7) (7u55-2.4.7-1ubuntu1~0.13.10.1)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)

代码是:

 if (args.length < 2) {
        System.out.println("SF   <retailername> retailername <manName> man");
        System.exit(1);
    }
    GetSoogrData wa = new GetSoogrData();
    try {
        BufferedReader bf = new BufferedReader(new FileReader(args[0]));

        String line = null;
        while ((line = bf.readLine()) != null) {
            Class c  = wa.getClass();


            c.getDeclaredMethod(line, null);
        }

编译器提供有关Raw Type(类是原始类型)的警告以及getDeclaredMethod上有关Type的警告。该类刚刚声明:

public class GetSoogrData {

    private HashMap<String, Integer> wordDictionary =   new HashMap<String, Integer>();
    private File inputFile;

    private File outputFile;
    private String retailerName;
    private String man;
    private String[] word;

    public void getTemperature() {
        System.out.println("device temp");
    }

我正在使用getTemperature进行测试。

我已经尝试了几个版本的代码,没有错误但也没有结果。代码似乎完全忽略了该方法。我在没有getDeclaredMethod的情况下进行了测试,并且它工作正常,因此可以访问该方法并实例化该类。因此错误在于实际的getDeclaredMethod。我看到Java版本可以影响这个。

有没有人有解决方案?

3 个答案:

答案 0 :(得分:3)

你应该做的事情如下:

Method method = c.getDeclaredMethod(line);
method.invoke(wa);//this will call method whatever is there in your line method without any parameters

答案 1 :(得分:1)

首先,该行:

c.getDeclaredMethod(line, null);

应该是:

c.getDeclaredMethod(line);

getDeclaredMethod收到Class个对象的varargs数组,因此您的非参数化方法应该接收一个空数组,而不是null

其次,使用invoke获取方法对象后,您应该Method.invoke(Object)

无论如何,调试可能会解决你的问题。您可以逐行运行以查看代码行是否被忽略&#34;然后您可能会弄清楚代码的错误...

答案 2 :(得分:0)

我刚刚在getDeclaredMethod doesn't work, NoSuchMethodException找到了第二个查询的答案 - 解决方案涉及添加String.class作为参数。