簡體   English   中英

Java中的getDeclaredMethod失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM