本の項目 22 と 41 の間の明らかな矛盾に対処しましょう:
項目 22: 「型を定義したくない場合は、インターフェイスを使用しないでください。」
この項目は、実際の型や具体的な機能を表さないものにはインターフェイスを使用すべきではないことを示唆しています。たとえば、定数を保存するためだけにインターフェイスを使用することは良い習慣ではありません。インターフェイスは、クラスが実装するコントラクトまたは動作を定義するために使用する必要があります。
項目 41: 「本当に型を定義したい場合は、インターフェイスを使用してください。」
この項目では、インターフェイス、特にマーカー インターフェイスを使用して、コンパイル時にチェックできる方法でクラスを分類またはマークする型を定義する方法について説明します。マーカー インターフェイスはメソッドを定義しませんが、コンパイル時にクラスの動作をチェックするために使用できる論理型を定義します。
アイテムを調整中
両方の項目を理解する鍵は、有用な型を定義することとインターフェイスを適切に使用することの違いです。
項目 22 では、特定の機能や動作が関連付けられていないものにはインターフェイスの使用を避けるよう記載されています。その考え方は、クラスが従わなければならない明確な規約を定義するためにインターフェイスを使用する必要があるということです。
項目 41 では、特定の目的でクラスを分類またはマークし、コンパイル時のチェックに使用できる型を定義する場合は、インターフェイス (マーカーを含む) を使用することをお勧めします。
実用化
項目 22: これは避けてください:
public interface Constants { String SOME_CONSTANT = "value"; int ANOTHER_CONSTANT = 42; }
これはタイプや動作を定義しません。これは単なる定数のコンテナであり、インターフェイスの悪い使用法です。
項目 41: インターフェイスを使用してタイプをマークする:
public interface PhysicalProduct { // Interface marcadora sem métodos } public class Book implements PhysicalProduct { // Implementação da classe que indica que é um produto físico }
ここで、PhysicalProduct インターフェイスは、配送計算などの特定の目的でチェックおよび使用できる論理タイプを定義し、物理的な製品のみが考慮されるようにします。
結論
両方の項目は、インターフェイスをいつどのように適切に使用するかについてのガイダンスを提供することで相互に補完します。前提条件は、動作を定義するメソッドを通じて、または論理的で有用な方法でクラスを分類するマーカーとして、意味のある型を定義し、明確なコントラクトを定義するためにインターフェイスを使用する必要があるということです。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3