java使用私有构造函数访问私有内部类的重写方法
请查找以下代码段: 等级规则
public class Rules {
public static final JarvisFilterRule FILTER = new JarvisFilterRule();
private static class JarvisFilterRule extends RelOptRule {
private JarvisFilterRule() {
super(operand(Filter.class, operand(Query.class, none())));
}
public void onMatch(RelOptRuleCall call) {
// do something
}
}
}
类重新编译
public abstract class RelOptRule {
/**
* Description of rule, must be unique within planner. Default is the name
* of the class sans package name, but derived classes are encouraged to
* override.
*/
protected final String description;
public abstract void onMatch(RelOptRuleCall call);
}
我的问题是:如何访问嵌套类规则的onMatch()方法。JarvisFilterRule强>
# 1 楼答案
Rules.FILTER.onMatch(...)
JarvisFilterRule
不是内部类。Java中的内部类是非静态的嵌套类# 2 楼答案
private
关键字的目的是防止访问需要由声明它的类独占使用的类成员在您的例子中,
Rules
类将JarvisFilterRule
定义为一个private
内部类,其实现应该只为Rules
类所知如果希望访问另一个类中的
JarvisFilterRule::onMatch()
方法,则需要将JarvisFilterRule
的private
修饰符替换为public
,或者将内部类JarvisFilterRule
移动到其自己的单独文件中,并使其成为public
类。像这样:或
希望这有帮助