构造函数V.S. setter方法

时间:2016-08-27 04:59:54

标签: java

setter处理为私有变量赋值时,为什么需要constructor方法。

有什么区别?

public class Account {


private String name;


public Account(String name)
{
    this.name = name;
}

public void setName(String Name)
{
    this.name = name;
}

public String getName()
{
    return name + " is the best";
}

3 个答案:

答案 0 :(得分:4)

构造函数参数最适用于必填字段。您无法提供所需的所有值,无法创建对象。

命名字段在可选时更好,可以按任何顺序设置,你想清楚哪个字段是什么。当类型相同且容易混淆时,命名字段也有助于避免混淆。

注意:

  • 这些可以用于组合。
  • 您可以使用工厂方法或构建器,而不是直接调用构造函数。

答案 1 :(得分:1)

对于Starter,您可以使用constructor在实例化对象时设置属性的值,但很多情况下这对您来说会有问题,因为Object可能具有不同的值,具体取决于他们被置于上下文中。

使用Constructor并且实例化Object(构造函数每个对象只有一次)如果需要更改属性的值,该怎么办?您可以创建新的Object,但这会浪费资源。如果Dependency不是代码中的一个选项,那么只需要构造函数。

为了满足OOPGetterSetter方法的4原则的要求,实现它的关键。

它也取决于你的设计模式,对于Immutable Object Creation,你必须使用构造函数,因为你不能在创建后改变Object的状态。

GetterSetter是Pojo Object被认为更强大的原因,当你必须编写100个具有大量逻辑的LOC时。但是使用构造函数,您必须根据需求创建不同参数的构造函数,以满足您的逻辑,从而导致对类的依赖性数量。

为了将来的目的,Constructor应仅用于实例化Single responsibility principle中的SOLID对象。

答案 2 :(得分:0)

虽然构造函数可以处理作业,但是setter的功能是使相应的值可变(外部),而构造函数只有它是不可变的,除非它是公开的或在内部更改。

通常,不应该更改的值(如ID等)由构造函数设置并标记为final,而要在外部更改的值具有setter方法以根据需要更改值。 / p>