繁体   English   中英

Java中的构造函数问题

[英]constructor problem in java

public class StateQueryFilter extends FieldQueryFilter {
   // private static final Log LOG = LogFactory.getLog(RecommendedParser.class.getName());

    public StateQueryFilter() {
        super("state", 5f);
        super("city", 5f);
        super("notdirectory", 5f);
        //LOG.info("Added a state query");
    }

}

它报告:

Constructor call must be the first statement in a constructor   

有办法使它起作用吗?

您只能在构造函数中调用一次super ,并且它必须是第一行。

在执行操作时多次调用它甚至没有意义。 调用super不会创建新对象; 它只是让超类初始化其字段。 您是否真的要尝试多次初始化同一字段? 您可能正在尝试创建三个单独的对象,但这不是这样做的方法。

另请参见Java教程中的使用关键字super

不。 您尝试构造3次对象,逻辑上有缺陷。

Java语言规范的8.8.7节开始

构造函数主体的第一条语句可以是对相同类或直接超类的另一个构造函数的显式调用(第8.8.7.1节)。

请注意“第一条”声明-您不能超过一个。

我发现构造函数调用丑陋的二传手。

另一种选择是让构造函数接受参数。

public StateQueryFilter() {
    super(/*state*/ 5, /* city */ 5, /*notdirectory*/ 5);
    //LOG.info("Added a state query");
}

但是看起来你应该做类似的事情

public class StateQueryFilter extends FieldQueryFilter {
    private final String city;
    private final String state;
    private final boolean noDirectory;

    public StateQueryFilter(String city, String state, boolean noDirectory) {
        this.state = state;
        this.city = city;
        this.notDirectory = notDirectory;
    }
}
// later
FieldQueryFilter filter = new StateQueryFiler("Los Angeles", "California", true);

顺便说一句:不要使用浮点值,它们几乎永远不是最好的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM