从静态方法访问非静态成员变量

时间:2012-04-08 03:14:11

标签: java static non-static

我刚刚开始使用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 );
    }

1 个答案:

答案 0 :(得分:3)

您不能从静态方法引用非静态变量,因为该静态方法附加到类,而不是任何特定实例。从它的角度来看,那些非静态变量甚至不存在。但是,您的问题具有误导性,因为无论如何,您的代码中都没有显示任何非静态变量成员。看起来您的问题更多的是如何实例化适当的分类规则并将其应用于静态方法参数。有很多方法可以做到这一点,最简单的方法是简单地实例化一个规则的实例:

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

但鉴于您有多个分类规则子类,您可能需要一种更复杂的实例化方法。工厂在这里可能很有用,或者您可以使用一些更高级的对象创建模式,如注入。