【问题标题】:Constructor V.S. setter Methods [duplicate]构造函数 V.S.设置方法[重复]
【发布时间】:2017-01-03 19:05:00
【问题描述】:

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

有什么区别?

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";
}

【问题讨论】:

  • 所以以后可以重新设置名称。构造函数设置新对象的默认值
  • 不如看看这里有没有类似的问题?我在这里找到了一个stackoverflow.com/questions/19359548/…
  • 你的意思是回null。所以可以给它一个不同的名字吗?
  • 没有。它只是将 name 字段设置为通过重新分配传递给 setter 的新名称

标签: java


【解决方案1】:

构造函数参数最适合必填字段。如果不提供所需的所有值,则无法创建对象。

命名字段最好是可选的,可以按任意顺序设置,你要明确哪个字段是什么。当类型相同且容易混淆时,命名字段还有助于避免混淆。

注意事项:

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

【讨论】:

    【解决方案2】:

    对于 Starter,您可以使用 constructor 在实例化您的对象时设置属性的值,但在很多情况下这对您来说是个问题,因为 Object 可能会根据它们被放置的上下文具有不同的值进入。

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

    满足OOPGetterSetter方法4个原则的要求是实现它的关键。

    这也取决于您的设计模式,对于Immutable Object Creation,您必须使用构造函数,因为在创建对象后您无法更改它的状态。

    GetterSetter 是 Pojo 对象被认为更强大的原因,当你必须编写 100 个包含大量逻辑的 LOC 时。但是对于构造函数,您必须根据满足您的逻辑的要求创建不同参数的构造函数,从而导致对类的依赖数量。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-10-21
        • 2016-05-04
        • 1970-01-01
        • 1970-01-01
        • 2016-07-08
        • 2020-09-26
        • 2020-12-15
        • 1970-01-01
        • 2021-01-19
        相关资源
        最近更新 更多