[英]Getters/setters in Java
我是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中没有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;
}
}
与IDE无关的方法是使用Lombok ,这是一个基于注释的库,可生成getter,setter,甚至equals()
和hashcode()
。 它为编译器执行此操作,但不在源文件中执行此操作,因此您不必查看方法,只需使用它们即可。
可悲的是,不,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的影响
在Java中,没有暴露对象内部的唯一选择是在示例中创建自己的getter和setter。
惯例是在正在改变的字段前面添加get
或set
。 因此,在您的示例中,字段name
将分别具有getName
和setName
方法作为其对应的getter和setter。
在添加setter和getter之前,最好先问问自己为什么要公开相关Object的内部数据。
我建议你阅读这篇文章 - http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.