マーカーインターフェイスは、クラスをマークするだけで主に役立つため、アノテーションを使用して同じことを実現できます。たとえば、Cloneable
インターフェイスは@Cloneable
。
それで、マーカーインターフェースの必要性はまだありますか、それともアノテーションによって置き換えることができますか?それらのいずれかを使用することの長所/短所はありますか?つまり、どちらか一方を優先するということですか?
マーカーインターフェイスは、クラスをマークするだけで主に役立つため、アノテーションを使用して同じことを実現できます。たとえば、Cloneable
インターフェイスは@Cloneable
。
それで、マーカーインターフェースの必要性はまだありますか、それともアノテーションによって置き換えることができますか?それらのいずれかを使用することの長所/短所はありますか?つまり、どちらか一方を優先するということですか?
マーカーインターフェイスは、タイプを定義するために使用される場合、注釈よりも優れています。たとえば、Serializableは、シリアル化可能でなければならない引数のタイプとして使用できます(使用する必要があります)。注釈はそれを許可していません:
public void writeToFile(Serializable object);
マーカーインターフェイスでタイプが定義されておらず、メタデータのみが定義されている場合は、アノテーションの方が適しています。
もう1つ言及すべきことは、注釈を使用するコストです。オブジェクトがインターフェイスのインスタンスであるかどうかを確認するために使用できますinstanceof
。これは、最近では比較的低コストの操作です。アノテーションを使用するにはJava reflection
呼び出しが必要であり、はるかにコストがかかります。