Java中的getter / setter

我是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,如从类的实例访问私有字段作为字段,但是有一个在类内部实现它的方法?

不。 AS3 getter和setter是ECMAScript的东西。 在Java中,你会遇到getVal()和setVal()样式函数 – 没有任何语法糖可以让你轻松搞定。

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

您的Java代码很好,除非您希望将_name设为私有

Java中没有getset关键字,如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中没有相同的语言级支持。

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

我认为没有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的影响

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

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

惯例是在正在改变的字段前面加上或set 。 因此,在您的示例中,字段name将分别具有getNamesetName方法作为其对应的getter和setter。

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