在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))来加载..不确定什么是最佳实践?
答案 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的默认构造函数。这些选项都非常好。