- PR -

Eclipseでgetter, setterメソッドの生成について

投稿者投稿内容
stepx2
会議室デビュー日: 2003/11/05
投稿数: 6
投稿日時: 2003-11-06 09:02
いつもお世話になっております。
Eclipse(2.1.1)を使いはじめたばかりで、
お恥ずかしい内容の質問なのですが、
教えてください。
Javaのクラスでプロパティを記述し、Eclipseの機能でsetter, getterメソッドを
生成できると思いますが、その時に自動的に生成されるコードは次のようになります。
コード:
public String getAddress() {
    return address;
}

public void setAddress(String string) {
    address = string;
}



これを次のようなコードを生成するようにしたいのですが、
このような設定はできるのでしょうか。
コード:
public String getAddress() {
    return this.address;
}

public void setAddress(String address) {
    this.address = address;
}


パラメータの名前がstringというのが
ちょっと違和感があります。
よろしくお願いいたします。
swat
常連さん
会議室デビュー日: 2002/03/21
投稿数: 33
お住まい・勤務地: 埼玉県
投稿日時: 2003-11-06 11:21
swatです。

この現象は、Eclipseのバグであったはずです。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=35857

現在、私は2.1.2を使用していますが、まだ直っていないようです。
_________________
****** swat ******
http://www.h7.dion.ne.jp/~s_wat/
http://d.hatena.ne.jp/swat/
stepx2
会議室デビュー日: 2003/11/05
投稿数: 6
投稿日時: 2003-11-06 12:23
swatさん 返信ありがとうございます。

バグだったのですね。
知りませんでした。

私も丁度今2.1.2にバージョンアップしたのですが、
おっしゃる通り直っていないですね。

修正されるのを気長に待つことにします
どうもありがとうございました。
javan
会議室デビュー日: 2003/03/03
投稿数: 18
投稿日時: 2003-11-06 12:43
私は今の
コード:
public void setAddress(String string) {

address = string;
}


の方がよいと思います。というのは、もし
コード:
public void setAddress(String address) {

this.address = address;
}



コード:
public void setAddress(String address) {

address = address;
}


こう書いてしまった場合(thisを書かない)、当然正しく動作しません。
過去に経験しましたが、このバグを発見するのは結構時間がかかりました。
Eclipseが自動で生成するのだから関係ないと思うかもしれませんが、
後で修正などを行っているときに、何かの手違いで修正ミスを
する場合も考えられます。

#上記はある本(どの本かは忘れてしまいましたが、「Effective Java」や
#「Javaの格言」系の本)に書いてありましたし、私自身もそう思います。

*追記
以前のバージョンのEclipseでは
コード:
public void setAddress(String address) {

this.address = address;
}


が生成されていましたが、今のようになったのはバグで
はなく、上記のような事があるので、あえてそうしたの
だと思います。


[ メッセージ編集済み 編集者: javan 編集日時 2003-11-06 12:51 ]
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2003-11-06 12:58
代わりに、変数を選んで
「リファクタリング」→「フィールドのカプセル化」で行えば
フィールド名と同じパラメタを持たせることができます。
フィールドが複数あると面倒ですが…

javanさんの「パラメタ名とフィールド名は異なる方が良い」という指摘ですが、
私は賛成できません。おっしゃることはわからなくもないですが、
この場合Eclipseによって自動生成されるコードなのですから、
手動で修正することはない、つまり、
this.address = address;

address = address;
に書き換わることはないと考えてよいのではないでしょうか。

また、フィールド名の変更をする時でもEclipseのリファクタリング機能に頼ればよく、
手動で変更するという危険を冒す必要はありません。

こういうことを言い出したら、
string = string;
というバグがあった場合はどうするといかいう話にもなってくると思います。
stepx2
会議室デビュー日: 2003/11/05
投稿数: 6
投稿日時: 2003-11-06 13:15
引用:

koeさんの書き込み (2003-11-06 12:58) より:
代わりに、変数を選んで
「リファクタリング」→「フィールドのカプセル化」で行えば
フィールド名と同じパラメタを持たせることができます。
フィールドが複数あると面倒ですが…


できました!
Eclipseは使い始めたばかりで、
振り回されている状態ですが、
いろいろ試しながら習得していきたいと
思っています。
ありがとうございました。

おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2003-11-06 15:26
引用:

javanさんの書き込み (2003-11-06 12:43) より:
私は今の
コード:
public void setAddress(String string) {
    address = string;
}


の方がよいと思います。


この場合、Javadocを生成すると引数が"string"という名前になってしまいます。
Setterのように引数が1個しかないものはそれでも構わないかも知れませんが、
同一型で複数個の引数を持つメソッドの場合は問題になると思います。また、
引数が1個だけの場合もJavadocを生成することを考えると仮引数に意味のある
名前を与える方が良いのではないかと思います。
あと、インスタンス変数やインスタンスメソッドの呼び出しにthisを明示的に
付加するようにコーディング規約を設定した方が、可読性を考えても良いと
思います。thisをつけないと、クラス変数(もしくはメソッド)とインスタンス
変数(もしくはメソッド)へのアクセスが同一の表記になってしまい、判別
できなくなります。
問題は、thisを付けずに書いてしまったコードをどのようにして機械的に見つけ
だせるか、ですが、、、
# ただ、仰るようなバグは単体テストですぐに発覚しますよね??
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-11-06 15:57
unibon です。こんにちわ。

引用:

おばけさんの書き込み (2003-11-06 15:26) より:
問題は、thisを付けずに書いてしまったコードをどのようにして機械的に見つけ
だせるか、ですが、、、
# ただ、仰るようなバグは単体テストですぐに発覚しますよね??


コーディングスタイルで this を付けるか付けないかは、
両方の流儀があり、どちらも一長一短ありますので、
なかなかどちらかに決めるのは難しいと思います。

ただ、誤って、
コード:

public void setAddress(String address) {
address = address;
}


と、書いても、昔はコンパイル時に警告が出なくて、
実行時にはじめて気づくケアレスミスでしたが、
最近は Eclipse だとコンパイル時にちゃんと警告として表示されます。
#JDK の javac だと依然として警告は出ませんが。

ちなみに setter で this を使うやりかただと、
どうしても this を使わないと書けないコード
(内部クラスからその外側のクラスのインスタンスが持つフィールドを参照する場合など)
との区別がつきにくくなる(というか this が随所に現れてしまうので希少性(?)が薄れる)ので、
そういう点から言えば this を使うやりかたの優位性がなくなってきていると感じます。
その一方で、setter で this を使わないやりかただと、
引数の名前に a などを付けるなどの細工が必要となるので、
これはこれで面倒なことは確かなのですが。


#あとで誤字を修正。

#そのあとで引用の箇所に追加。
[ メッセージ編集済み 編集者: unibon 編集日時 2003-11-06 16:00 ]

[ メッセージ編集済み 編集者: unibon 編集日時 2003-11-06 16:59 ]

スキルアップ/キャリアアップ(JOB@IT)