2012-04-08 65 views
2

我剛剛開始使用Java,但遇到以下代碼有問題。我正在使用這樣的東西從靜態方法調用非靜態應用方法,但我不認爲它非常有效。我設置了需要應用的規則的數組列表,但是我無法使其運行。從對象數組列表中調用方法

ClassificationRule rules = new RuleFirstOccrnc(); 
    ClassificationRule rules1 = new RuleOccrncCount(); 
    rules.apply(aUserInput); 
    rules1.apply(aUserInput); 

試圖從ClassificationRule調用apply()方法時,我得到這個錯誤「的方法適用(字符串)是不確定的ArrayList類型」。任何幫助將不勝感激!

package tweetClassification; 

import java.util.ArrayList; 

public class PrioritRuls { 

    //Set of rules to be applied 
    final static ArrayList<ClassificationRule> rulesA 
     = new ArrayList<ClassificationRule>(); 

    static{ 
     rulesA.add(new RuleFirstOccrnc()); 
     rulesA.add(new RuleOccrncCount()); 
    } 

    // ******************************************* 
    public static void prioritize(final String aUserInput){ 

     rulesA.apply(aUserInput); //ERROR 
     // The method apply(String) is undefined 
     // for the type ArrayList<ClassificationRule> 
     } 
} 
package tweetClassification; 

public class ClassificationRule { 

    // ******************************************* 
    public void apply (final String aUserInput) { 

     apply(aUserInput); 
     } 
} 

回答

3

正確的,因爲你調用數組列表對象的apply方法,而不是數組列表的內容。

它更改爲類似

rulesA.get(0).apply() 

或者,如果你要調用它的每一個元素,你需要通過列表進行迭代。

for (ClassificationRule rule:rulesA){ 
    rule.apply(aUserInput); 
} 
+0

非常感謝您的快速響應。不勝感激! – tom3322 2012-04-08 23:30:44

1

您正在嘗試調用的ArrayListapply()而不是在ClassificationRule對象。 ArrayList沒有這個方法,所以如預期的那樣 - 你會得到一個編譯錯誤。

你可能想迭代每個ClassificationRule對象的ArrayListapply()for-each loop

rulesA.get(someIndex).apply(aUserInput) 

一個多種:特定元素

for (ClassificationRule rule : rulesA) rule.apply(aUserInput) 

apply()事情:

public void apply (final String aUserInput) { 
    apply(aUserInput); 
} 

將導致無限遞歸調用apply() [好,不完全是無限的,它最終會拋出異常。這不是你目前的錯誤,因爲這是運行時錯誤,而你仍然停留在編譯時錯誤。

+0

非常感謝你的解釋,我得到了它的工作。 :) – tom3322 2012-04-08 23:31:23

+0

你最歡迎@ tom3322,祝你好運!稍後請不要忘記[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)其中一個答案。 – amit 2012-04-08 23:33:42

+0

關於apply()你如何建議我解決這個問題,我沒有得到任何錯誤..我試圖使用繼承調用規則的非靜態apply()方法。 – tom3322 2012-04-09 00:50:16

相關問題