在Java的空构造函数

时间:2017-05-10 19:32:36

标签: java constructor

在Java中使用空构造函数是否可以?例如,从MySQL数据库加载数据时,我想做类似的事情:

ResultSet set = statement.executeQuery();
while (set.next()) {
    Faction faction = new Faction();
    faction.setId(UUID.fromString(set.getString("id")));
    faction.setName(set.getString("name"));
}

因为我已经拥有了派系类的构造函数,

public Faction(Player player, UUID uuid) {}

我想知道我是否可以使用普通的构造函数,只需将值设置为何时。

否则我可以创建一个构造函数,使用与mySQL数据匹配的参数(public Faction(String name,UUID uuid,String announcement..etc))来加载..不确定什么是最佳实践?

2 个答案:

答案 0 :(得分:4)

如果在实例化Faction类时对象状态不应该更改,请为构造函数提供args并删除setter更好。
通过这种方式,您可以避免不良行为。

现在,根据您的说法,您可能需要设置多个String参数 使用构造函数执行此操作非常容易出错,因为在使用它时可能会在参数顺序中出错。

为了满足您的需求,您有两种主要方式:

  • 使用空构造函数,然后按照你的建议使用setter(如果对象是可变的,则是可取的)

  • 如果您的对象是不可变的,您可以使用Builder模式构造一个不可变对象(您可以编写如下内容:Faction faction = new Faction.Builder().name(name).uuid(uuid).announcement(announcement).build();

答案 1 :(得分:0)

这取决于您的使用案例。如果您不希望在设置它们后更改类变量,那么在这种情况下将这些变量声明为final并使用参数化构造函数。如果你想在设置变量后改变它们,那么使用带有setter和getters的默认构造函数。这些选项都非常好。