14

私は最近、Javaでパブリック内部列挙型/クラスを使用してはならないと主張するコーディング標準に出くわしました。私がこの大会に出会ったのはこれが初めてであり、その理由について満足のいく説明を見つけることができませんでした。

パブリック内部クラスを避ける必要がある理由は理解していますが、パブリックネスト列挙型を使用しない理由は何ですか?または、なぜこれは従うべき悪い慣習なのですか?

4

3 に答える 3

13

免責事項: 以下は厳格なルールではありません。これらは私の意見と個人的な好みです。個人的には、コードが読みやすく、保守しやすいと感じています。

最初の質問。このアドバイスはどこで見つけましたか?彼らは何か根拠を提供しましたか?

私の経験では、通常、コードの可読性と保守性を高めるために、ネストされたプライベート列挙型を使用していました。これは、別のシステムとの統合を実行していて、特定の文字列または数値を送信する必要がある場合に特に役立ちます。列挙型を使用すると、読みやすく、保守しやすくなることがわかりました。この特定のケースでは、列挙型によって伝達される情報の範囲はクラスに限定されます(つまり、クラス外では意味がなく、他の誰もそれを必要としないはずです)。

パブリック内部列挙型が悪い習慣である理由を言う決定的な理由を考えることはできません。しかし、私が(通常)それらを使用しない理由は次のとおりです。

  • 列挙型が公開されている場合、それは本質的に、より広い範囲で情報を伝達することを意味します(つまり、親クラスの範囲外で意味があるため、おそらく他のものがそれを使用していることを意味します)。この場合は、スタンドアロンの列挙型にする方が理にかなっている可能性があります。
  • ThirdPartyResponseCodes.Success目にはより簡単だと思います ThirdPartyIntegrationInterface.ThirdPartyResponseCodes.Success。コンテキストを提供するために列挙型に適切な名前を付けて、スタンドアロンの列挙型にすることができない理由はありません。
  • パブリック内部クラスを使用しないのと同じ理由が、パブリック内部列挙型にも当てはまると思います。まず第一に、内部クラスがある場合、外部クラスがリファクタリングの恩恵を受ける可能性があることを意味する場合があります。おそらくあなたの外側のクラスはやりすぎですか?反対に、カプセル化とスコープの制限の利点があります。特に、内部クラスが外部クラスのコンテキストでのみ意味があるという議論を行うことができる場合(プライベートであるかどうかは言うまでもありません)。それがパブリック内部クラスである場合、それはおそらくそのスコープが外部クラスを超えて拡張されていることを意味し、したがってそれを引き出す必要があります。
  • パブリックネストされた列挙型を本当に使用する必要がある場合は、なぜそれが必要になるのか(私はまだそうする理由を見つけていません)、そしてなぜそれをパブリックネストされた列挙型として残しておく方が良いのかを正確に文書化する必要がありますパブリックスタンドアロン列挙型。
于 2010-11-10T22:05:53.910 に答える
0

その理由は、それらの列挙型を、それを囲むクラスの名前で修飾する必要があるため、それらが宣言されているクラスの外で使用するのが困難になるためと考えられます。もちろん、すべてのパブリックインナークラスにも同じことが言えます。そして、私がそれに同意するかどうかはわかりません-確かに厳格なルールとしてではありません。

于 2010-11-10T22:04:33.383 に答える
0

説明が含まれていない場合は、そのコーディング標準を作成した人に尋ねる必要があります。しかし、あなたのこの声明はやや紛らわしいです:

パブリック内部クラスを避ける必要がある理由は理解していますが、パブリックネスト列挙型を使用しない理由は何ですか?

なぜパブリックインナークラスは避けるべきだと思いますか?そして、なぜその理由は列挙型に当てはまらないのでしょうか?

于 2010-11-10T22:05:08.500 に答える