我有一个批处理应用程序,它使用带有方法名称的文件输入,然后名称用于按设计执行具有相同名称的方法。
例如,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版本可以影响这个。
有没有人有解决方案?
答案 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作为参数。