我有一个简单的问题但令人困惑。 可以说我有一个有自己字段的类,我想在Main类中初始化它们,但我知道我可以使用“Get and Set”方法来做到这一点,而且也可以使用类的构造函数并实现相同的功能。结果
我的问题是,解决这种情况的更好或更合适的方法是什么?他们之间的区别是什么,做另一个的优点和缺点是什么?
谢谢,我会感谢一个很好的答案:)
答案 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粉丝。