代码之家  ›  专栏  ›  技术社区  ›  wrongusername

getter和setter的目的是什么?[复制品]

  •  1
  • wrongusername  · 技术社区  · 16 年前

    可能重复:
    Public Data members vs Getters, Setters
    Purpose of private members in a class

    当您只需将变量公开并避免诸如 A.setVariableX(A.getVariableY()) ?

    5 回复  |  直到 14 年前
        1
  •  11
  •   AllenJB    16 年前

    隐藏实现详细信息。如果您选择公开您的属性,然后决定更改它们的工作方式,则必须更改所有关联的代码。

    使用getter和setter,您通常可以在不更改可见API的情况下更改内部实现细节(从而避免更改任何使用相关类的API的代码)。

        2
  •  3
  •   Rowland Shaw    16 年前

    getter和setter可以进行验证和惰性实例化,而public成员则不能。

    顺便提一句,这不是语言不可知论,因为实现属性的大多数语言都抽象出实现,因此它们在代码中看起来像公共成员。

        3
  •  3
  •   Pieter Germishuys    16 年前

    因为有时会有一些关于变量可能是什么的约束,并且必须在设置变量时检查它是否有意义。

    例如,如果您的年龄不允许是-1,您将在您的设置器中检查它。

    if(value >= 0)
    {
       _age = value;
    }
    else
    {
      throw new InvalidAgeException("Age may not be less than 0");
    }
    
        4
  •  2
  •   mouviciel    16 年前

    无论代码中有什么“属性”,setter和getter都将应用于属性。

    例如,您可以 angle 变量,存储以弧度表示的角度值。然后,您可以用您认为相关的任何角度单位为这个变量定义setter和getter。

        5
  •  0
  •   Matteo Riva    16 年前

    这是封装原理的一部分。您可以使用setter和getter作为与对象交互的接口,这样您可以(例如)稍后添加任何功能(例如验证输入数据),而不必接触使用类的代码。