JavaのGetters/Setters
-
22-08-2019 - |
質問
私はJavaを初めて使用していますが、ActionScript 3でOOPエクスペリエンスをしているので、私が知っているものに頼って移行しようとしています。
ActionScript 3では、Get and Setキーワードを使用してGettersと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
ASのオブジェクトで:
var dummy:Dummy = new Dummy("fred");
trace(dummy.name);//prints: fred
dummy.name = "lolo";//setter
trace(dummy.name);//getter
Javaでそれをどうやってやるの?
いくつかのパブリックフィールドを持っているだけでは問題ありません。メソッドの前でGetを使用して設定するこの慣習があることに気付きました。
例えば、
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/Settersに相当するものはありますか?
解決
いいえ。 AS3ゲッターとセッターはECMAScriptのものです。 Javaでは、GetVal()とSetVal()スタイルの機能に固執しています。これを簡単にするための構文砂糖はありません。
Eclipseは、これらの種類のものを自動生成するのに役立つと思います...
他のヒント
あなたの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;
}
}
悲しいことに、いいえ、Javaには同等の言語レベルのサポートはありません。
get* and set*パターンはJava文化で非常に確立されているため、それらに対する強力なサポートが見つかります(たとえば、Eclipseはそれらを自動的に作成します)。 JSPS(EL)用に作られた場合、プロパティ表記を使用してゲッターとセッターにアクセスできます。
コードをより複雑にすることを除いて、あなたのケースでは何もしないので、ゲッターやセッターを持っていないことを考えます。これは、ゲッターやセッターのない例です。
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-and-gonne-need-it
IDEに依存しない方法は、使用することです ロンボク, 、ゲッター、セッター、さらには生成する注釈ベースのライブラリ equals()
と hashcode()
. 。これはコンパイラに対してこれを行いますが、ソースファイルではありませんので、メソッドを見る必要はありません。それらを使用するだけです。
Javaでは、オブジェクトの内部を公開せずに持っている唯一のオプションは、例にあるように自分のゲッターとセッターを作成することです。
コンベンションは、プレップすることです get
また set
変更されているフィールドの前で。したがって、あなたの例のように、フィールド name
持っているだろう getName
と setName
それぞれ対応するゲッターとセッターとしての方法。
また、セッターとゲッターを追加する前に、問題のオブジェクトの内部データを公開する理由を自問することをお勧めします。
この記事を読むことをお勧めします -http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html