通过Get& amp;初始化实例变量设置与构造函数

时间:2017-03-28 07:44:14

标签: java constructor properties get set

我有一个简单的问题但令人困惑。 可以说我有一个有自己字段的类,我想在Main类中初始化它们,但我知道我可以使用“Get and Set”方法来做到这一点,而且也可以使用类的构造函数并实现相同的功能。结果

我的问题是,解决这种情况的更好或更合适的方法是什么?他们之间的区别是什么,做另一个的优点和缺点是什么?

谢谢,我会感谢一个很好的答案:)

5 个答案:

答案 0 :(得分:1)

本质上:当你依赖需要它们的框架时,你应该只提供setter。例如:在从JSON文件解析序列化数据时,许多框架都希望您拥有setter方法;他们通过反思找到/使用。

一般来说:

  • 让你的领域成为最终
  • 使用构造函数初始化它们
  • 尽可能避免提供制定者

背景:好的OO是关于封装隐藏实现。字段应该是对象的“私人业务”;外面没有人应该知道他们。暴露制定者可以在以后进行各种滥用。

答案 1 :(得分:1)

如果你使用构造函数初始化一个全局变量,那么你只能在创建一个对象的时候这样做。想想你可能经常更改变量值的情况,你需要这种情况不要创建一个新的对象,只需调用getter和setter方法,你的意志就会为你完成。 当你声明它时,构造函数只会自动完成一次这个工作,但是getter和setter方法可以在你需要时一次又一次地完成这项工作。

答案 2 :(得分:1)

面向对象的设计概念

OOD 构造函数的概念是确保构造后类的实例处于有效状态。

确保此不变量,在纯 OOD 中,实例的所有方法调用都应保留实例状态的有效性。

框架概念

框架通常依赖于默认的构造函数来创建类的实例。

由于支持可读性和实例配置的灵活性,框架通常需要 Setters 来初始化实例的状态。

为了模仿构造后的不变量,一些框架支持创建后的回调方法,这些方法应该在创建和初始化之后验证实例的最终状态。

<强>后果

通过提供默认构造函数和 Setters ,即使在不是实例的情况下,您的实例也是可变的。

当您的框架未创建和验证时,您的实例可能处于无效状态(例如,在设置方法中使用单元测试创​​建时)。

使用这两个世界的最佳做法

尝试避免使用参数建立有效内部状态的类的默认构造函数和 Setters

尝试尽可能多地定义 final 字段。

如果您必须仅提供 Setters 支持构造函数,这些构造函数会使用所有必需参数重用 Setters 来建立其初始内部状态。在更改内部状态之前, Setters 应强制执行所有必需的规则。

答案 3 :(得分:0)

  

在我的观点中初始化构造函数优势

- 私有字段的初始化,并且不需要使用setter方法

  

初始化setter方法优势

-unpopulated你的构造函数,如果你有一个if-else,循环来做等等,它更简洁易懂的构造函数。

  

getter方法

它用于返回值,以便您可以在例如算术运算或测试条件等

答案 4 :(得分:0)

终于回答了我的问题。 尽可能短:每当我需要初始化一个实例变量时,我知道这个值确实在运行时不会发生变化,我应该使用构造函数。 但是,对于需要在运行时更改的值,Setters和Getters可以帮助您初始化可变值。

希望有所帮助。 归功于:java粉丝。