我是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,如 从类的实例访问私有字段作为字段,但有一个方法在类内部实现它?
答案 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。
惯例是在正在改变的字段前面加get
或set
。因此,在您的示例中,字段name
将分别使用getName
和setName
方法作为相应的getter和setter。
答案 6 :(得分:1)
在添加setter和getter之前,最好先问问自己为什么要公开相关Object的内部数据。
我建议你阅读这篇文章 -
http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html