2

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

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

ClassificationRule から apply() メソッドを呼び出そうとすると、「メソッド apply(String) は 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 );
        }
}
4

2 に答える 2

3

applyそうです、配列リストの内容ではなく、配列リスト オブジェクトに対してメソッドを呼び出しているからです。

次のようなものに変更します

rulesA.get(0).apply()

または、すべての要素で呼び出したい場合は、リストを反復処理する必要があります。

for (ClassificationRule rule:rulesA){
  rule.apply(aUserInput);
}
于 2012-04-08T23:20:42.603 に答える
1

apply()オブジェクトのArrayList代わりにを呼び出そうとしClassificationRuleています。ArrayListにはこのメソッドがないため、予想どおり、コンパイル エラーが発生します。

for-each ループを使用して、各オブジェクトに対してandを反復したい場合があります。ArrayListapply()ClassificationRule

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

または特定apply()要素に:

rulesA.get(someIndex).apply(aUserInput)

もう一つ:

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

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

于 2012-04-08T23:20:56.610 に答える