2014-10-23 2 views
3

Lucene 정보 검색 API에서 보호 된 정적 메서드를 사용하려고합니다. 정적에 대한 나의 이해는 클래스 정의로부터 액세스된다는 것과 보호 된 키워드에 대한 나의 이해는 클래스 나 서브 클래스의 인스턴스에서만 액세스 할 수 있다는 것입니다. 그렇다면 정적으로 보호 된 메소드에 얼마나 정확하게 액세스합니까? 내 이해가 틀렸는가? 가져온 항아리의 라이브러리에서 보호 된 정적 메서드를 호출하려고합니다. 내가 어떻게 그럴 수 있니? 내가 클래스 이름의 "자료"부분은 당신에게 힌트를 제공한다 StopwordAnalyzerBaseProtected Static Method Access

+0

흠, 나는 왜 메소드가 보호되고 정적이어야하는지 알지 못합니다. 정적 방법은 "독립형"이어야합니다. 어쨌든이 메서드에 액세스하려고하면 클래스를 호출하려고 시도하는 클래스는 정적 메서드가있는 수퍼 클래스를 확장해야합니다. – nafas

+0

@nafas 그게 내 생각 이었지만 Lucene을 사용해야하고 그 방법은 무엇입니까 서면 –

+0

안녕하세요, 내 의견을 업데이 트했습니다. 희망이 도움이 – nafas

답변

2

StopwordAnalyzerBase.loadStopwordSet(params)으로이 메소드를 호출 할 수없는 이유는 무엇입니까?

(컴파일하고 내 컴퓨터에서 작동하는)이 예를 살펴 : 78 (루씬 버전 4.9.0 :

package p1; 

public class C1 { 
    protected void nonStatic() {} 
    protected static void isStatic() {} 
} 

---- 
package p2; 

import p1.C1; 

public class C2 extends C1 { 
    public void someMethod() { 
    super.nonStatic(); 
    C1.isStatic();  // or even C2.isStatic() 
    } 
} 

를 다시 원래의 질문에 도착,이 방법은 ArabicAnalyzer 내에서 호출되는 것을 볼 수 있습니다 , 패키지 org.apache.lucene.analysis.ar)뿐만 아니라 많은 다른 것들.

+0

잠시만 기다려주세요. 이해하지만 이해할 수 있습니다. 확장 클래스 내에서 정적 메서드를 호출해야합니다. –

2

에서 loadStopwordSet를 호출하고이 경우

:이 그것은 그것 때문에 정적 StopwordAnalyzerBase 의 서브 클래스에서 호출하기위한 것입니다 인스턴스 메소드 일 필요는 없습니다 (자체적으로 포함되어 있으며 호출하는 객체의 상태를 변경하지 않습니다). API를 살펴보면 최소한 보호되는 이유는 알 수 없습니다. 최소 권한 원칙을 따를 것 외에도

+0

BaseAnyalyzer에서 전화를 걸었습니다. 기본과 일식을 확장하면 여전히 보이지 않습니다. –

관련 문제