为了账号安全,请及时绑定邮箱和手机立即绑定

吸气剂和吸气剂的目的是什么?

吸气剂和吸气剂的目的是什么?

慕容森 2019-12-25 11:10:58
我读过一些书Java,说为诸如x和的变量创建setter和getter很好y。例如:public int getX(){    return x;}public void setX(int x){    this.x = x;}但这有什么区别呢?...(shape.x)...   // basically getX()和shape.x = 90;    // basically setX()如果二传手和消气手更好,您能告诉我哪些实际问题会出现?
查看完整描述

3 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

使用getter和setter函数可以进行约束和封装。可以说x是半径。shape.x = -10没有太大意义。另外,如果有人尝试设置非法值,则可以打印错误,设置默认值或什么都不做。


优良作法是将成员变量设为私有,这样程序就不能直接使用它们对其进行修改。


查看完整回答
反对 回复 2019-12-25
?
阿晨1998

TA贡献2037条经验 获得超6个赞

很多人提到封装实现的细节,这对我来说是在类中使用getter和setter的最大原因。这样,您还可以获得许多其他好处,包括能够一时兴起地抛出并替换实现,而无需接触使用类的每段代码。在一个小型项目中,这并不是什么大好处,但是如果您的代码最终成为一个使用良好的(内部或公共)库,那么它将是一个巨大的好处。

一个具体的例子:数学中的复数。有些语言将它们作为一种语言或框架功能,而另一些则没有。我将在这里以可变的类为例,但是它很容易不变。

复数可以写在表单上,a + bi具有实部和虚部,非常适合[gs]etRealPart[gs]etImaginaryPart

但是,在某些情况下,更容易推断出极性形式re^(iθ)[gs]etRadius(r)和[gs]etAngle(θ)的复数。

您还可以公开类似[gs]etComplexNumber(realPart, imaginaryPart)和的方法[gs]etComplexNumber(radius, angle)。根据参数类型,这些名称可能需要也可能不需要不同的名称,但是类的使用者可以根据需要使用它们。

两种形式可以互换。您可以很容易地从一种转换为另一种,因此该类用于内部存储的形式与该类的使用者无关。但是,消费者可以使用任何一种形式。如果您选择a + bi形式作为内部表示形式,并使用字段而不是getter和setter公开该形式,则不仅迫使类消费者使用该形式,而且以后也无法轻松地改变主意并用以下形式替换内部表示形式: re ^(iθ),因为事实证明在特定情况下更容易实现。您必须使用已定义的公共API,该API要求使用特定的字段名称专门公开实部和虚部。


查看完整回答
反对 回复 2019-12-25
  • 3 回答
  • 0 关注
  • 330 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信