オブジェクト配列の型エンコーディングを理解する
関数呼び出しからオブジェクトを取得し、その文字列表現を出力するときに、不可解な表記法に遭遇する可能性があります。 「[Ljava.lang.Object;」のように。この謎めいた式はオブジェクトのクラス型を表しますが、その不可解な形式をどのように解読すればよいでしょうか?
クラス型のエンコーディング スキームは Class.getName() で詳しく説明されています。参照型 (配列を除く) の場合、バイナリ名が返されます。プリミティブ型と void には Java キーワードが割り当てられます。ただし、配列の場合、エンコーディングは独自の形式になります。
配列エンコーディング: 分解 [ Ljava.lang.Object; ]
"Ljava.lang.Object;"は、オブジェクトの配列を表す Java クラスの表記法であり、Object[].class とも呼ばれます。命名パターンは次の規則に従います。
エンコーディングについて表記法
形式は次のとおりです。
要素タイプ エンコーディング
boolean Z
byte B
char C
double D
float F
int I
long J
short S
クラス またはInterface Lclassname;
デコード例
説明のために、次の例を考えてみましょう。
配列がオーバーライドする理由toString()
予想に反して、配列の toString() メソッドは Object クラスの実装から逸脱しています。配列はこのメソッドをオーバーライドしないため、前述の形式で文字列を返します。したがって、次のように指定された Object から継承されたメソッドが呼び出されます:
String.class は次の形式の文字列を返します: getClass().getName() '@' Integer.toHexString(hashCode())
代替の配列文字列表現
java.util.Arrays クラスは、配列のより使いやすい文字列表現を提供します。
追加の役立つリソース
以上がJava 配列型エンコーディングにおける「[Ljava.lang.Object;」」は何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。