質問

私は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 持っているだろう getNamesetName それぞれ対応するゲッターとセッターとしての方法。

また、セッターとゲッターを追加する前に、問題のオブジェクトの内部データを公開する理由を自問することをお勧めします。
この記事を読むことをお勧めします -http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top