本の項目 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 インターフェイスは、配送計算などの特定の目的でチェックおよび使用できる論理タイプを定義し、物理的な製品のみが考慮されるようにします。
結論
両方の項目は、インターフェイスをいつどのように適切に使用するかについてのガイダンスを提供することで相互に補完します。前提条件は、インターフェイスは、動作を定義するメソッドを通じて、または論理的で有用な方法でクラスを分類するマーカーとして、意味のある型を定義し、明確なコントラクトを定義するために使用されるべきであるということです。
以上がアイテムと本についての振り返りの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。