この記事では、Java マーカー インターフェイス (マーカー インターフェイス) とは何ですか? Java タグ インターフェイスの紹介は、必要な方の参考になれば幸いです。
まず、マーカー インターフェイスとは何なのか見てみましょう。タグ インターフェイスは、タグ インターフェイスと呼ばれることもあります。つまり、インターフェイスにはメソッドが含まれません。 Java でマークされたインターフェイスの例を見つけるのは簡単です。たとえば、JDK の Serializable インターフェイスはマークされたインターフェイスです。
まず最初に、マーカー インターフェイスは決して Java プログラミング言語に固有のものではなく、Java プログラミング言語で一般的なメソッドであることを明確にしましょう。コンピューターサイエンスのデザインコンセプト。
Wikipedia でマーカー インターフェイスの定義を見てみましょう。
「タグ/マーカー インターフェイス パターンは、コンピューター サイエンスにおける設計パターンであり、オブジェクトに関する実行時の型情報を提供する言語で使用され、言語が行うクラスにメタデータを関連付ける手段を提供します。このようなメタデータは明示的にサポートされていません。"
上記の段落を翻訳するために Google 翻訳を試しましたが、翻訳が非常に悪かったので、説明します。
タグ付きインターフェイスは、コンピューター サイエンスにおける設計上のアイデアです。プログラミング言語自体は、クラスのメタデータの維持をサポートしていません。マーカー インターフェイスはこの機能の不足を補います。実際、クラスはメソッドなしでマーカー インターフェイスを実装します。ある意味、マーカー インターフェイスはこのクラスのメタデータの 1 つになります。実行時に、プログラミング言語のリフレクション メカニズムを通じて、コード内でこのメタデータを取得できます。
シリアル化可能なインターフェイスを例に挙げます。クラスはこのインターフェイスを実装し、シリアル化できることを示します。したがって、実際には Serializable インターフェイスを使用して、クラスに「シリアル化可能」メタデータをマークし、「シリアル化可能」というラベルを付けます。これが、タグ/ラベル インターフェイスの名前の由来です。
次のコードは、JDK ソース コードから抜粋したものです。
if (obj instanceof String) { writeString((String) obj, unshared); } else if (cl.isArray()) { writeArray(obj, desc, unshared); } else if (obj instanceof Enum) { writeEnum((Enum) obj, desc, unshared); } else if (obj instanceof Serializable) { writeOrdinaryObject(obj, desc, unshared); } else { if (extendedDebugInfo) { throw new NotSerializableException(cl.getName() + " " + debugInfoStack.toString()); } else { throw new NotSerializableException(cl.getName()); } }
Java でのシリアル化、文字列、配列、列挙クラス、および通常のクラスは個別に実行されます。現在シリアル化される変数が文字列でも配列でも列挙型クラスでもない場合、そのクラスが Serializable インターフェイスを実装しているかどうかがチェックされます。以下の図の 1177 行目でこの検出が実行されることに注意してください。 Serializable インターフェイスが実装されていない場合は、例外 NotSerializableException がスローされます。
Spring でアノテーションをあちこちに飛び散らせるのはメタデータを維持する最良の方法ではないのかと疑問に思うかもしれません。実際、メタデータを維持する目的で、Java パッケージ、クラス、フィールド、メソッド、ローカル変数、メソッド パラメーターなどの前で Annotation を宣言できます。これは柔軟で便利です。ただし、そんな良いものはJDK1.5以降でしか使えません。 JDK1.5 より前は、メタデータを維持するという重要なタスクはマーク インターフェイスにありました。
別のマーカー インターフェイスである Cloneable を見てみましょう。以下の図の 51 行目は、このインターフェースが JDK1.0 から利用可能であることを明確に示しています。
クラスが Cloneable インターフェイスを実装していない場合は、JDK ソース コードの Clone メソッドに関するコメントも明確に記載されています。 clone メソッドの実行時に実行されます。 CloneNotSupportedException がスローされます。
#
以上がJava マーカー インターフェイスとは何ですか? Java マークアップ インターフェイスの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。