我试图在Lucene信息检索api中使用受保护的静态方法。我对static的理解是它们是从类定义中访问的,我对protected关键字的理解是它们只能从该类或子类的实例访问。那么你究竟如何访问静态保护方法呢?我的理解错了吗?我试图从导入的jar中的库中调用受保护的静态方法。我该怎么做?
在这种情况下,我从StopwordAnalyzerBase
调用loadStopwordSet答案 0 :(得分:2)
类名的“Base”部分应该给你一个提示:这是从StopwordAnalyzerBase的子类调用的 它是静态的,因为它不必是实例方法(它是自包含的,不会改变调用它的对象的状态)。看看API并没有告诉我它为什么会受到保护 - 除了遵循最低权限原则,我想
答案 1 :(得分:2)
为什么不能通过将此方法称为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()
}
}
回到原来的问题,我可以看到这个方法是在ArabicAnalyzer:78(Lucene版本4.9.0,包org.apache.lucene.analysis.ar
)以及许多其他人中调用的。