2012-04-08 13 views
2

私はJavaで始めるばかりで、次のコードに問題があります。私はこのような静的メソッドから非静的なapplyメソッドを呼び出すために何かを使用していたが、私は非常に効率的だとは思わない。私は適用する必要のあるルールの配列リストを設定しましたが、それを動作させることはできません。オブジェクトの配列リストからメソッドを呼び出す

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

ClassificationRuleから適用されます()メソッドをコールしようとしたとき、私はこのエラーを取得しています「の方法が適用されます(文字列)型の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

1

あなたはClassificationRuleオブジェクトの代わりにArrayListapply()を起動しようとしています。 ArrayListにはこのメソッドがありませんので、期待通りにコンパイルエラーが発生します。

rulesA.get(someIndex).apply(aUserInput) 

つ以上:

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

または特定の要素apply()へ:

あなたが反復for-each loopと各ClassificationRuleオブジェクト上ArrayListapply()する場合があります物:

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

apply() [良く、正確に無限ではない、それは最終的に例外がスローされます]に無限再帰呼び出しが発生します。これは実行時エラーであるため、現在のエラーではありません。コンパイル時にエラーが発生したままです。

+0

説明をいただきありがとうございます、私はそれを働かせました。 :) – tom3322

+0

あなたは大歓迎です@ tom3322、と幸運!後で答えの一つを[承諾する]ことを忘れないでください(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – amit

+0

apply()について私はそれを修正するよう提案していますが、私は何のエラーも出ません。継承を使ってルールの非静的apply()メソッドを呼び出そうとしています。 – tom3322

関連する問題