[英]getDeclaredMethod in Java Fails
我有一個批處理應用程序,該應用程序使用帶有方法名稱的文件輸入,然后通過設計使用名稱來執行具有相同名稱的方法。
例如,文件具有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);
}
編譯器給出有關原始類型的警告(類是原始類型),並在getDeclaredMethod上給出有關類型的警告。 該類剛剛聲明:
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版本會影響這一點。
有沒有人有解決方案?
您應該執行以下操作:
Method method = c.getDeclaredMethod(line);
method.invoke(wa);//this will call method whatever is there in your line method without any parameters
一,行:
c.getDeclaredMethod(line, null);
應該:
c.getDeclaredMethod(line);
getDeclaredMethod
接收一個Class
對象的varargs數組,因此您的非參數化方法應該接收一個空數組,而不是null
。
其次,您應該在獲取方法對象之后使用Method.invoke(Object)
invoke
該方法對象。
無論如何,調試可能會解決您的問題。 您可以逐行運行以查看代碼行是否被“忽略”,然后您可能會發現代碼出了什么問題...
我剛剛發現對我在getDeclaredMethod上的第二個查詢的答案不起作用,NoSuchMethodException-解決方案包括添加String.class作為參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.