我正在尝试使用Lucene信息检索API中的受保护静态方法。我理解静态方法是从类定义中访问的,我对受保护关键字的理解是只能从该类或子类的实例中访问。那么如何访问受保护的静态方法呢?我的理解是否有误?我正在尝试从导入的jar库中调用受保护的静态方法。我该怎么做?
在这种情况下,我正在从StopwordAnalyzerBase中调用loadStopwordSet方法。
在这种情况下,我正在从StopwordAnalyzerBase中调用loadStopwordSet方法。
为什么不能通过引用StopwordAnalyzerBase.loadStopwordSet(params)
来调用该方法?
考虑以下示例(在我的机器上编译并工作):
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()
}
}
org.apache.lucene.analysis.ar
)以及其他许多地方调用。"Base"这个类名的部分应该给你一个提示:这是要从StopwordAnalyzerBase的子类中调用的。它是静态的,因为它不需要是实例方法(它是自包含的,不会更改调用它的对象的状态)。查看API并不能告诉我为什么它应该是受保护的 - 除了遵循最小特权原则之外,我想