23

私は Java を初めて使用しますが、ActionScript 3 で OOP の経験があるため、知っているものに依存して移行しようとしています。

ActionScript 3 では、get キーワードと set キーワードを使用してゲッターとセッターを作成できます。つまり、クラスにメソッドを作成し、そのクラスのインスタンスのプロパティを介してデータにアクセスします。複雑に聞こえるかもしれませんが、そうではありません。次に例を示します。

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でそれを行うにはどうすればよいですか?

public フィールドをいくつか持つだけでは問題ありません。メソッドの前に 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 ゲッター/セッターに相当するものはありますが、それをクラス内で内部的に実装するためのメソッドがありますか?

4

7 に答える 7

20

いいえ。AS3 のゲッターとセッターは ECMAScript のものです。Java では、getVal() および setVal() スタイルの関数に行き詰まっています。物事を簡単にする構文糖衣はありません。

Eclipseは、これらのタイプのものを自動生成するのに役立つと思います...

于 2009-05-17T17:28:57.860 に答える
10

_name privateにしたい場合を除いて、Java コードは問題ありません。

AS3 の例のように、Java にはgetおよびsetキーワードはありません。申し訳ありませんが、それはあなたがすでに行っていることよりも良くなりません.

修正されたコード:

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;
  }
}
于 2009-05-17T17:29:46.690 に答える
3

残念ながら、Java には同等の言語レベルのサポートはありません。

ただし、get* および set* パターンは Java 文化で非常に確立されているため、それらに対する強力な IDE サポートを見つけることができます (たとえば、Eclipse はそれらを自動的に作成します)。 jsps (EL) 用に作成すると、プロパティ表記を使用してゲッターとセッターにアクセスできるようになります。

于 2009-05-17T17:31:06.733 に答える
3

IDE に依存しない方法は、getter、setter、および を生成する注釈ベースのライブラリであるLombok使用することです。これはコンパイラに対して行われますが、ソース ファイルでは行われないため、メソッドを確認する必要はなく、メソッドを使用するだけです。equals()hashcode()

于 2010-01-03T18:21:56.513 に答える
3

コードをより複雑にすることを除いて、あなたの場合は何もしないので、ゲッターまたはセッターを持たないことを検討します。これは、ゲッターまたはセッターを使用しない例です。

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

IMHO 必要以上に複雑にしないでください。複雑さを追加すると、You-Aint-Gonna-Need-It に悩まされることがよくあります。

于 2009-05-17T17:52:29.080 に答える
2

Java では、オブジェクトの内部を公開しない唯一のオプションは、例のように独自のゲッターとセッターを作成することです。

規則では、変更するフィールドの先頭getまたは前に付けます。setしたがって、あなたの例のように、フィールドnameには対応するゲッターとセッターとしてそれぞれメソッドgetNameとメソッドがあります。setName

于 2009-05-17T17:29:42.477 に答える