teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

日本語としておかしかった部分を修正

2015/03/31 04:04

投稿

poad1010
poad1010

スコア30

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  Javaに限ってのお話ですが、他の方が答えられているように、大半は、JavaBeansの仕様に従っているだけだと思います。
2
- 他のオブジェクトから操作されたくないような場合は、[この記事](http://qiita.com/Yahagi_pg/items/661197a5f8600fd9958e#getterとsetterはオブジェクト指向の基本であり必ず利用すべきである)にあるように、単純に薄っぺらいラッパーではなく、もっと、getterはまだしも、setterは別のかたちのメソッドになるように思えます。
2
+ 他のオブジェクトから操作されたくないような場合は、getterはまだしも、setterに関しては、[この記事](http://qiita.com/Yahagi_pg/items/661197a5f8600fd9958e#getterとsetterはオブジェクト指向の基本であり必ず利用すべきである)にあるように、単純に薄っぺらいラッパーではなく、別のかたちのメソッドになるように思えます。
3
3
 
4
4
  また、インスタンスフィールドを公開しない理由としては、疎結合にするというのもあります。
5
5
  疎結合にすることで、JMockitなどで、クラスをMock化する際に、accessorメソッドがあった方が、Mock化しやすいという利点もありますが、現実には、インスタンスフィールドを直接書き換えるなんて、リフレクションを使わない限りは、初心者くらい(バグ出しそうで、怖くて、普通はやらない)だと思うので、コンストラクターで初期化して、書き換えないような場合はpublic final、リフレクションで初期化してから使われるような場合は、publicにして公開してしまったりしています。