getter和setter如何工作?

ajs*_*sie 106 java getter setter

我来自php世界.你能解释一下getter和setter是什么,可以给你一些例子吗?

Pau*_*sey 126

这并不是真正需要的教程.阅读封装

private String myField; //"private" means access to this is restricted

public String getMyField()
{
     //include validation, logic, logging or whatever you like here
    return this.myField;
}
public void setMyField(String value)
{
     //include more logic
     this.myField = value;
}
Run Code Online (Sandbox Code Playgroud)

  • 所以getter只是获取私有字段的方法,而setter正在设置一个新字段.感谢代码的出色解释 (10认同)
  • @noname:当给出复杂/大/抽象名称的简单事物时,你就有了所谓的"设计模式"......这就是我刚刚发明的递归概念解释模式的一个例子;-) (4认同)
  • @qed:`this`关键字是可选的,除非与具有更具体范围的内容发生冲突.在您给出的示例中,创建的setter将具有一个名称与字段名称匹配的参数,因此`this.fieldName = fieldName`用于区分正在分配字段而不是分配给的参数它的自我作为`fieldName = fieldname`将实现.getter中不存在这样的冲突. (3认同)
  • noname:不,不.Getter是获取值的方法,但不暴露字段中包含的值,即如果你调用`someObj.getTime().setHour(5)`它不应该影响`someObj`的内部状态.另外,setter和getters*(由他们的粉丝名称设置的访问者和变种者)*具有非常严格的方法签名,这意味着getter没有任何参数.一般来说,方法应该只做一件事. (2认同)

Mar*_*ers 39

在Java中,getter和setter是完全普通的函数.使他们成为吸气剂或制定者的唯一因素是惯例.foo的getter被称为getFoo,setter被称为setFoo.在布尔值的情况下,getter被称为isFoo.它们还必须具有特定声明,如"name"的getter和setter示例所示:

class Dummy
{
    private String name;

    public Dummy() {}

    public Dummy(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用getter和setter而不是让你的成员公开的原因是它可以在不改变界面的情况下改变实现.此外,许多使用反射来检查对象的工具和工具包只接受具有getter和setter的对象.例如,JavaBeans必须具有getter和setter以及一些其他要求.

  • 这些建设者不应该没有'无效'吗? (9认同)
  • 这里不需要Void (3认同)
  • @JasonHartley:构造函数没有返回类型. (2认同)

use*_*648 12

class Clock {  
        String time;  

        void setTime (String t) {  
           time = t;  
        }  

        String getTime() {  
           return time;  
        }  
}  


class ClockTestDrive {  
   public static void main (String [] args) {  
   Clock c = new Clock;  

   c.setTime("12345")  
   String tod = c.getTime();  
   System.out.println(time: " + tod);  
 }
}  
Run Code Online (Sandbox Code Playgroud)

当你运行程序时,程序从主电源开始,

  1. 对象c已创建
  2. 函数setTime()由对象c调用
  3. 变量time设置为传递的值
  4. 函数getTime()由对象c调用
  5. 时间回来了
  6. 它会过去todtod打印出来


sup*_*fav 9

您可能还想阅读" 为什么getter和setter方法是邪恶的 ":

尽管getter/setter方法在Java中很常见,但它们并不是特别面向对象(OO).实际上,它们可能会损害代码的可维护性.此外,许多getter和setter方法的存在是一个红旗,该程序未必从OO角度设计得很好.

本文解释了为什么不应该使用getter和setter(以及何时可以使用它们)并提出一种设计方法,以帮助您摆脱getter/setter心态.