2011-08-21 4 views
13

重複の可能性:
marker interface
What is the purpose of a marker interface?マーカーインターフェイスの目的は何ですか?

私はマーカーインターフェイスが何であるかを知っている - がない方法とのインタフェース。 例:Serializable、Remote、Cloneable。

私はマーカーの目的が何であるか疑問に思っています。これは私の理解です: -

基本的には、通常のオブジェクトから特定のオブジェクトを特定するだけです。直列化の場合と同様に、直列化が必要なオブジェクトは直列化可能なインタフェースを実装しなければならず、writeObject()メソッドは直列化可能かどうかのどこかをチェックしなければなりません。限り、私は思う、それはwriteObjectはインターフェイスserializable(マーカーインターフェイス)を使用して唯一の目的だ。右?またはjvmはシリアル化可能なインタフェースに基づいていくつかの余分な機能も提供していますか?

同様の種類のロジックは、クローン可能なインターフェイスにも当てはまります。

ここでどのように役立つかを見てみましょう。

アプリケーションで1000個の値オブジェクトがあるとします.100個の特定のオブジェクトのみをシリアル化したいとします。今やJDKは、プログラマの役割は、この場合はマーカインタフェースで特別なものとしてオブジェクトをマークすることであると述べています。この場合、JDKはどのオブジェクトを直列化するかどうかを考慮しますか?

はい、この種の動作は何らかのbolleanフラグで実現できます。しかし は悪いアプローチになります。

同様に、ユーザー定義のマーカーインターフェイスの場合、マーカーインターフェイスの助けを借りて特殊オブジェクトを区別することができます。たとえば、演算子のインスタンスを使用して、その特定のインターフェイスのインスタンスであるかどうかを判断できます。はいの場合は、Noをスローします。

上記のご理解に間違いはありませんか?

+0

重複があります。私はそれらを見つけることができます – Bozho

答えて

14

ご理解の方が正しいです。マーカインタフェースは、タイプも定義します。したがって、メソッドシグネチャで使用できます。たとえば、HibernateのSession.get() methodは、Serializableを引数として取ります。それは、引数として直列化不可能な主キーを渡すことを避ける。

Cloneableは遡って悪いデザインの選択とみなされます。

シリアル化が実装されたときに存在していれば、シリアル化可能であることは確かにアノテーションで実装されている可能性があります。

マーカーインターフェイスはほとんどの場合、アンチパターンです。インタフェースは、多態的な動作を定義する必要があります。マーカーインタフェースはアノテーションで置き換えることができます。

+0

このリンクも同じことを実証http://javarevisited.blogspot.in/2012/01/what-is-marker-interfaces-in-java-and.html –

関連する問題