2012-04-08 9 views
2

자바로 시작 했으므로 도움이 필요합니다. 나는 정적 메서드에 대해 비 정적 참조를 만들 수는 없지만이를 해결하기 위해 도움이 필요하다는 것을 알고있다. 개체의 인스턴스를 생성하여 비 정적 멤버 변수에 액세스 할 수 있다고 읽었지만 정확하게 수행하는 방법을 모르겠습니다. 다음은 코드에 대한 설명입니다. 도움이나 지시 사항은 정말 감사하겠습니다. 특정 인스턴스에 반대하는 정적 메서드는 클래스에 연결되어 있기 때문에이 정적 메서드에서 비 정적 변수를 참조 할 수 없습니다정적 메서드에서 비 정적 멤버 변수에 액세스하기

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); 
    } 

답변

3

. 그것의 관점에서 볼 때, 비 정적 변수는 존재하지 않습니다. 그러나 어쨌든 비 정적 변수 멤버를 코드에서 찾을 수 없기 때문에 질문이 오해의 소지가 있습니다. 귀하의 질문은 적절한 분류 규칙을 인스턴스화하고이를 정적 메소드 인수에 적용하는 방법에 관한 것입니다. 이 작업을 수행하는 방법은 여러 가지가있다 간단한 단순히 규칙의 인스턴스를 인스턴스화하는 것입니다 :

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

을하지만 분류 규칙의 여러 하위 클래스가 주어진, 당신은 아마 더 정교한 방법이 필요합니다 그 (것)들을 인스턴스화하십시오. 팩토리가 여기 유용 할 수도 있고, Injection과 같은 좀 더 진보 된 객체 생성 패턴을 사용할 수도 있습니다.

+0

@Perception의 답변이 정확합니다. 게다가 평범한'ClassificationRule'을'abstract'로 선언하고'apply' 메소드를'abstract'로 만들 것을 권합니다. 현재 로선 ClassificationRule의'apply' 메소드는 무한 루프입니다. –

+0

고마워요!! 아주 간단했습니다 .. 설명해 주셔서 고맙습니다. – tom3322

관련 문제