受保护的静态方法访问

时间:2014-10-23 15:01:59

标签: java static lucene protected

我试图在Lucene信息检索api中使用受保护的静态方法。我对static的理解是它们是从类定义中访问的,我对protected关键字的理解是它们只能从该类或子类的实例访问。那么你究竟如何访问静态保护方法呢?我的理解错了吗?我试图从导入的jar中的库中调用受保护的静态方法。我该怎么做?

在这种情况下,我从StopwordAnalyzerBase

调用loadStopwordSet

2 个答案:

答案 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)以及许多其他人中调用的。