Java中的Getters / setter

时间:2009-05-17 17:24:55

标签: java actionscript-3 setter getter accessor

我是Java新手,但对ActionScript 3有一些OOP经验,所以我试图依靠我所知道的东西进行迁移。

在ActionScript 3中,您可以使用get和set关键字创建getter和setter,这意味着您在类中创建一个方法,并通过该类的实例的属性访问数据。我可能听起来很复杂,但事实并非如此。这是一个例子:

class Dummy{

    private var _name:String;

    public function Dummy(name:String=null){
        this._name = name;
    }

    //getter
    public function get name():String{
        return _name;
    }

    //setter
    public function set name(value:String):void{
    //do some validation if necessary
        _name = value;
    }

}

我会在对象中访问name

var dummy:Dummy = new Dummy("fred");
trace(dummy.name);//prints: fred
dummy.name = "lolo";//setter
trace(dummy.name);//getter

我如何用Java做到这一点?

只是拥有一些公共领域是不可能的。 我注意到有一种在方法前面使用get和set的惯例,我很好。

例如,

class Dummy{

    String _name;

    public void Dummy(){}

    public void Dummy(String name){
        _name = name;
    }

    public String getName(){
        return _name;
    }

    public void setName(String name){
        _name = name;
    }

}

Java中是否存在等效的ActionScript 3 getter / setter,如 从类的实例访问私有字段作为字段,但有一个方法在类内部实现它?

7 个答案:

答案 0 :(得分:20)

不。 AS3 getter和setter是ECMAScript的东西。在Java中,你坚持使用getVal()和setVal()样式函数 - 没有任何语法糖可以让你轻松。

我认为Eclipse可以帮助自动生成这些类型的东西,但是......

答案 1 :(得分:10)

您的Java代码很好,除了您想要_name 私有

在您的AS3示例中,Java中没有获取设置关键字。对不起,它没有比你现在做的更好。

更正后的代码:

class Dummy {
  private String _name;

  public void Dummy() {}

  public void Dummy(String name) {
    setName(name);
  }

  public String getName() {
    return _name;
  }

  public void setName(String value) {
    _name = value;
  }
}

答案 2 :(得分:3)

可悲的是,不,java中没有相同的语言级支持。

get *和set *模式虽然在java文化中如此建立,你会发现它们对它们有强大的IDE支持(例如,eclipse会自动为你制作它们),如果你正在使用的是首先为jsps(EL)制作表达式语言,然后你就可以使用属性表示法来访问getter和setter。

答案 3 :(得分:3)

我会考虑不使用getter或setter,因为除非使代码更复杂,否则它们不会执行任何操作。这是一个没有getter或setter的例子。

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

Dummy dummy = new Dummy("fred");
System.out.println(dummy.name);//getter, prints: fred
dummy.name = "lolo";//setter
System.out.println(dummy.name);//getter, prints: lolo

恕我直言不要让事情比你需要的更复杂。通常情况下,添加复杂性会受到You-Aint-Gonna-Need-It

的影响

答案 4 :(得分:3)

独立于IDE的方法是使用Lombok,这是一个基于注释的库,可生成getter,setter,甚至equals()hashcode()。它为编译器执行此操作,但不在源文件中执行此操作,因此您不必查看方法,只需使用它们即可。

答案 5 :(得分:2)

在Java中,没有暴露对象内部的唯一选择就是在示例中创建自己的getter和setter。

惯例是在正在改变的字段前面加getset。因此,在您的示例中,字段name将分别使用getNamesetName方法作为相应的getter和setter。

答案 6 :(得分:1)

在添加setter和getter之前,最好先问问自己为什么要公开相关Object的内部数据。
我建议你阅读这篇文章 - http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html