2

Java を始めたばかりで、助けが必要です。静的メソッドで非静的参照を作成できないことはわかっていますが、それを回避するには助けが必要です。オブジェクトのインスタンスを作成することで、非静的メンバー変数にアクセスできると読んでいましたが、その方法が正確にはわかりません。これがコードの一部です。どんな助けや指示も本当に感謝しています。

package tweetClassification;        

public class PriorityRules {    

    public static void prioritize( final String userInput ){

            ClassificationRule.apply( aUserInput ); //ERROR
                            // Cannot make a static reference to 
                            // the non-static method apply(String)
                            // from the type ClassificationRule
        }
} 

*----------------------------------------------------------------
package tweetClassification;

public class ClassificationRule {

        public void apply (final String aUserInput) {   

            apply( aUserInput );
        }
    }

*----------------------------------------------------------------
package tweetClassification;

import java.util.ArrayList;

public class RuleFirstOccrnc extends ClassificationRule {

    public void apply ( final String aUserInput ){

        for( TweetCat t: TwtClassif.tCat )
            applyFirstOccurrenceRuleTo( t, aUserInput );
    }

*----------------------------------------------------------------
package tweetClassification;

public class RuleOccrncCount extends ClassificationRule {

    public void apply ( final String aUserInput ){

        for( TweetCat t: TwtClassif.tCat )
            applyOccurrenceCountRuleTo( t, aUserInput );
    }
4

1 に答える 1

3

特定のインスタンスではなく、静的メソッドがクラスにアタッチされているため、静的メソッドから非静的変数を参照することはできません。その観点からは、これらの非静的変数は存在さえしません。ただし、コードのどこにも非静的変数メンバーを表示しないため、質問は誤解を招きます。あなたの質問は、適切な分類ルールをインスタンス化し、それを静的メソッド引数に適用する方法に沿っているようです。これを行うにはいくつかの方法がありますが、最も簡単なのは、ルールのインスタンスを単純にインスタンス化することです。

ClassificationRule rule = new RuleFirstOccrnc();
rule.apply(userInput);

しかし、分類ルールのサブクラスが複数ある場合は、それらをインスタンス化するためのより洗練された方法が必要になるでしょう。ここではファクトリが役立ちますが、インジェクションなどのより高度なオブジェクト作成パターンを使用することもできます。

于 2012-04-08T03:23:14.273 に答える