Java 首选什么,使用setter或builder?
我有一门课是这样的:Java 首选什么,使用setter或builder?,java,setter,builder,Java,Setter,Builder,我有一门课是这样的: public class Team { private final String id; private final String subOrgId; private final String teamName; private final String costCenter; private final String email; private final String seaSecurityGroup;
public class Team
{
private final String id;
private final String subOrgId;
private final String teamName;
private final String costCenter;
private final String email;
private final String seaSecurityGroup;
private final String expesoSecurityGroup;
public Team(final String id, final String subOrgId, final String teamName, final String costCenter,
final String email, final String seaSecurityGroup, final String expesoSecurityGroup)
{
this.id = id;
this.subOrgId = subOrgId;
this.teamName = teamName;
this.costCenter = costCenter;
this.email = email;
this.seaSecurityGroup = seaSecurityGroup;
this.expesoSecurityGroup = expesoSecurityGroup;
}
public String getId()
{
return id;
}
public String getSubOrgId()
{
return subOrgId;
}
public String getTeamName()
{
return teamName;
}
public String getCostCenter()
{
return costCenter;
}
public String getEmail()
{
return email;
}
public String getSeaSecurityGroup()
{
return seaSecurityGroup;
}
public String getExpesoSecurityGroup()
{
return expesoSecurityGroup;
}
}
现在,我有一个用例,在这个用例中,我需要在类团队中设置ID的新值。我的意见是,我应该在类中为此(声明id为非final)创建一个setter,并使用它。然而,我也认为我应该继续制作一个生成器并使用它。虽然写一个二传者的工作要少一些,但我想确保我的模式是正确的。在这种情况下,建议采取什么措施
谢谢 在您提供的示例中,有许多私有变量要为对象设置,所有这些都是最终的;在这种情况下,使用builder模式是理想的。在这种情况下,setter不是很有用,因为它只会使用一次(因为所有对象变量都是最终的) 不要将“id”变量设为非最终变量。我假设你的对象在其存在的整个过程中只能有一个常量“id”值。这正是“决赛”的目的。让它成为非最终的完全违背了“最终”的目的 因此,保留“id”变量“final”。在您的切换案例中,获取您想要的任何id值并将其放入变量中,当使用生成器构建团队对象时,在您的切换案例之外使用该id变量
希望这是清楚的。首先,它看起来像一个JavaBean类(如果这就是您想要的,那么就有一个getter和setter以及一个默认构造函数,而这个默认构造函数不在您的类中,因为我不希望所有的参数都在构造函数中传递)。此外,如果将来您想添加4-5变量,那么您的代码将中断,因为您必须修改构造函数,这是可以避免的 第二,将final添加到变量中,并消除setter引导您创建可变类的方向,在这种情况下,您还应该将您的类作为final 当构造函数中有这么多参数时,考虑使用生成器模式 此外,您不应允许id具有任何setter属性。而是使用新id值创建一个新实例。
这就是易变性的工作原理,有助于避免新的bug。如果要更改对象的(单个)属性,则不应使用生成器模式 Builder模式解决了大量可选项的问题 参数和不一致状态,通过提供一种方法来构建 对象,并提供一个实际返回 最后一个目标 当您只想更新现有类的单个属性时,使用
setter
非常好,实际上这就是它们的用途
很难评估在不知道应用程序上下文的情况下更改该对象的ID是否有意义。使用新ID创建新对象也可能是一个选项 只有您可以确定,但这看起来像其他任何可能是JavaBean的POJO。我认为这是一个构建器,而不是正确的模式。当你想使用不可变对象时,你可以添加一个setter,它创建一个新的实例,只改变设置的值。如果这个不可变的类已经在使用,我不会不认真考虑就将它分解成一个可变的类,如果它已经在使用,那么很可能已经假设它是不可变的。