我是Java的新手,但是在ActionScript 3方面有一些OOP经验,因此我试图依靠我知道的东西迁移。

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

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做到这一点?

仅仅拥有一些公共领域是不可能的。我注意到,有这种约定在方法面前使用和设置的约定,我可以接受。

例如,

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,就像从类的实例访问私有字段作为字段,但具有在类内部实现的方法吗?

有帮助吗?

解决方案

没有。 AS3 Geters和Setters是一件ECMAScript的事情。在Java中,您被GetVal()和setVal()样式函数所困扰 - 没有任何句法糖可以使您变得容易。

我认为Eclipse可以帮助自动生成这些类型的事物...

其他提示

您的Java代码很好,除非您想制作 _name 私人的.

没有 得到 Java中的关键字如您的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;
  }
}

可悲的是,不,Java中没有同等语言级别的支持。

尽管在Java文化中建立了GET*和SET*模式为JSP(EL)制作,然后您可以使用属性符号来访问Getters和Setter。

我认为没有Getter或Setter,因为他们在您的情况下什么都不做,除了使代码更加复杂。这是一个没有Getters或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

恕我直言,没有比您需要的更复杂的事情。通常情况下,增加复杂性会遭受 你 - gonne-need-it

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

在Java中,您唯一没有公开对象内部的选项是像您的示例中一样制作自己的Getters和Setter。

惯例是预先准备 get 或者 set 在正在改变的田野前。因此,就像您的示例一样 name 将有 getNamesetName 方法分别作为相应的Getter和setter。

同样,在添加播放器和获取器之前,问自己为什么要公开有关对象的内部数据,这可能是一个好主意。
我建议您阅读本文 -http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top