[解決済み] Javaでマーカーインターフェース?
2022-05-29 06:20:39
質問
Javaにおけるマーカーインターフェースは空のインターフェースであり、このインターフェースを実装するクラスのオブジェクトがシリアライズやクローンなどの特別な方法で扱われなければならないことをコンパイラやJVMに知らせるために使用されると教わりました。
しかし、最近、私はそれが実際にはコンパイラやJVMとは何の関係もないことを学びました。たとえば
Serializable
インターフェイスの場合、メソッド
writeObject(Object)
の
ObjectOutputStream
は、次のようなものです。
instanceOf Serializable
を実装しているかどうかを検出するために、クラスは
Serializable
をスローします。
NotSerializableException
といった具合になります。
全てはコードで処理され、これはデザインパターンのようなので、独自のマーカーインターフェースを定義することができると思います。
さて、私の疑問です。
-
上記の1点目で述べたマーカーインターフェースの定義は間違っているのでしょうか?では、どのようにマーカー・インターフェースを定義すればよいのでしょうか。
-
を使う代わりに
instanceOf
演算子を使う代わりに、なぜメソッドは次のようにできないのでしょうか?writeObject(Serializable)
のように、実行時ではなくコンパイル時に型チェックを行うようにできないでしょうか? -
アノテーションはマーカーインターフェースよりどのように優れていますか?
どのように解決するのですか?
- 1.のマーカインターフェースの定義は間違っていますか? - (1)マーカーインターフェースは空でなければならない、(2)それを実装することで実装クラスが何らかの特別な扱いを受けることを意味する、という部分では正しいです。間違っているのは、JVMやコンパイラがそのクラスのオブジェクトを別扱いすることを暗示している部分です。これらのオブジェクトをクローン可能、シリアライズ可能などとして扱うのは、Javaクラスライブラリのコードであるという観察は正しいのです。それは、コンパイラーやJVMとは何の関係もありません。
-
instanceOf 演算子を使用する代わりに、なぜメソッドは次のようなものにならないのでしょうか。
writeObject(Serializable)
のようにすれば、コンパイル時に型チェックが行われます。 - これによって、quot;プレーンなObject
が必要なときに、マーカーインターフェースの名前でコードを汚さずに済みます。例えば、シリアライザブルにする必要があるクラスで、オブジェクトのメンバを持つ場合、キャスティングを行うか、オブジェクトをSerializable
にしなければなりません。これは、インターフェイスに機能がないため、不便である。 - アノテーションはマーカーインターフェースよりどのように優れているのですか? - アノテーションは、クラスに関するメタデータをその消費者に伝えるという同じ目的を、そのために別の型を作成することなく達成することを可能にします。アノテーションはより強力で、プログラマーはより洗練された情報を、それを消費するクラスに渡すことができます。
関連
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
JQuery DataTable 详解
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
Java Exceptionが発生しました エラー解決
-
IllegalArgumentException この例外を解決する方法
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
JQuery DataTable 详解
-
Methodのinvokeメソッド実装のJavaリフレクション
-
mavenプロジェクトのテストエラー java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig の問題を解決する。
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)