类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也受到保护,但您似乎无法访问foo成员变量。
我只希望能够检查有关受保护的静态类Clause的成员变量foo的某些信息。我该怎么做(最好是无反射)?
我非常希望不必修改父类,因为它是库的一部分。
最佳答案
aioobe的评论是正确的。
与外部类共享超类还不足以访问静态内部类的受保护成员。
调用方的类不扩展Clause,并且在不同的包中。为了使protected
具有相关性,您必须从Clause的子类中访问foo,或者从与ExtendedDismaxQParser相同的包中的类访问它。