Java中的Getters/setter

Geo*_*nza 22 java getter setter accessor actionscript-3

我是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;
    }

}
Run Code Online (Sandbox Code Playgroud)

我会name在一个对象中访问:

var dummy:Dummy = new Dummy("fred");
trace(dummy.name);//prints: fred
dummy.name = "lolo";//setter
trace(dummy.name);//getter
Run Code Online (Sandbox Code Playgroud)

我怎么用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;
    }

}
Run Code Online (Sandbox Code Playgroud)

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

zen*_*azn 20

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

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

  • 是的 - 您选择的编辑可能会做同样的事情.我听说Mx M-butterfly甚至可以为你编写其余的程序:) (12认同)
  • Netbeans的"Encapsulate Fields"也是如此 (2认同)

Ste*_*202 10

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

Java 中没有get和set关键字,如AS3示例中所示.对不起,它没有比你已经做的更好.

更正代码:

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;
  }
}
Run Code Online (Sandbox Code Playgroud)