【发布时间】:2016-07-05 17:27:42
【问题描述】:
ExtendedDismaxQParser 类有一个静态成员类 Clause:
public class ExtendedDismaxQParser {
protected static Class Clause {
protected String foo, bar;
}
public Clause getAClause {
Clause c;
// misc code that isn't important
return c;
}
}
然后我在不同的包中扩展了这个类:
public class SpecialDismaxQParser extends ExtendedDismaxQParser {
public void whatever() {
Clause c = super.getAClause();
boolean baz = c.foo.equals("foobar"); // <-- This doesn't compile
}
}
看起来您无法访问 foo 成员变量,尽管事实上 class Clause 受到保护,并且成员变量 foo 也受到保护。
我只是希望能够检查有关受保护的静态类子句的成员变量 foo 的信息。我该怎么做(最好不反思)?
我非常希望不必修改父类,因为它是库的一部分。
【问题讨论】:
-
这是因为 Clause 不是被扩展的类。这是一个很好的参考表:stackoverflow.com/a/33627846/276052
-
我已经写了一个答案,但是我的互联网断了,它似乎已被删除。基本上,将字段设为
public,因为它们目前仅对内部类的子类(以及同一包中的其他地方)可见。 -
大部分分析描述的是类,而不是内部类。
-
@zelinka 但规则仍然适用。正如我所说,
protected内部类的成员只能由内部类的子类(以及包中的其他地方)访问。
标签: java static inner-classes protected