Java はオブジェクト指向です。
セッターとゲッターに貧弱なロジックが含まれていない場合、プライベートフィールドを作成しても意味がない場合があります。
実際、多くの開発者は、getter と setter を作成し、private フィールドを書き込むことはカプセル化であると考えています => 間違っています!
データをカプセル化することがなぜ重要なのか、特にどのようにカプセル化するのか? オブジェクト指向プログラミングは手続き型プログラミングとどう違うのですか?
この記事を読んでいくつかの答えを得ることができます: http://pragprog.com/articles/tell-dont-ask
そしてこれ: http://en.wikipedia.org/wiki/Law_of_Demeter
とこれを使った少し具体的な例: http://www.devdaily.com/java/java-law-of-demeter-java-examples
したがって、私によると、約 99% のケースで、フィールドはプライベート/パッケージまたは保護されている必要があり (ただし、フレームワークがそれを強制しない限り、決してパブリックではありません... まれです)、クラス メソッドをラップすることによってのみ操作されます。ほとんどの場合、getter/setter の 95% は役に立たないので削除できることに気付くのは驚くべきことです。
これはまったく異なる考え方であり、手続き型の考え方を止めるのは困難ですが、コードは非常に柔軟でクリーンになり、現実世界に最も近いものになります ;)
あなたが言った:
他のクラスが MainClass をインスタンス化しないため、冗長であると主張します
優れたデザインの鍵は、機能の作成を許可する限り、最も制限的であることだと思います. 開発者が寛大すぎると、プログラムは深刻な奇妙な衝突や動作につながる可能性があります。
開発者は、将来のプログラムがどうなるか (大規模なプログラムの場合) を予測し、将来の開発者がコンテキストのようなエラーを犯す可能性があることに注意する必要があります: メソッドの外側でクラスをインスタンス化しますmain
。