问题描述
ExtendedDismaxQParser类具有静态成员类Clause:
The class ExtendedDismaxQParser has a static member class 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;
}
}
然后,我在另一个包中扩展了该类:
I then extended this class in a different package:
public class SpecialDismaxQParser extends ExtendedDismaxQParser {
public void whatever() {
Clause c = super.getAClause();
boolean baz = c.foo.equals("foobar"); // <-- This doesn't compile
}
}
尽管类子句受到保护,成员变量foo也受到保护,但您似乎无法访问foo成员变量.
It looks like you can't access the foo member variable, despite the fact that the class Clause is protected, and the member variable foo is also protected.
我只想能够检查有关受保护的静态类Clause的成员变量foo的某些信息.我该怎么做(最好是无反射)?
I just want to be able to check something about the member variable foo of the protected static class Clause. How can I do this (preferably without reflection)?
我非常希望不必修改父类,因为它是库的一部分.
I would greatly prefer to not have to modify the parent class because it is a part of a library.
推荐答案
aioobe的评论正确.
aioobe's comment is correct.
与外部类共享超类不足以访问静态内部类的受保护成员.
Sharing a superclass with the outer class isn't enough to get access to protected members of the static inner class.
调用方的类不扩展Clause,并且在不同的包中.为了使protected
具有相关性,您必须从Clause的子类中访问foo,或者从与ExtendedDismaxQParser相同的程序包中的类访问它.
The caller's class doesn't extend Clause, and is in a different package. For protected
to be relevant you'd have to access foo from within a subclass of Clause, or access it from a class in the same package as ExtendedDismaxQParser.
这篇关于访问父级子类中静态类的受保护成员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!