类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相同的包中的类访问它。

08-16 06:34