私はこのようないくつかのコードを記述したいと思います:どのjava.lang.ClassメソッドがClass.forName()の正しい入力を生成しますか?
:Object o = ...;
String oTypeName = o.getClass().getName();
//on the other side of the wire:
Class<?> oClass = Class.forName(oTypeName);
Object oAgain = oClass.newInstance();
しかし、この方法はClass.forName()
に期待される入力が生成されますどのすなわち、私はoTypeName
を初期化するために使用すべきメソッドのjavadocから明らかではありません
getCanonicalName()
:Java言語仕様で定義されているように、基になるクラスの正式名を返します。基底クラスが正規名を持たない場合(つまり、ローカルクラスまたは匿名クラスの場合、またはコンポーネント型には正式な名前はありません)。 "getName()
: "このClassオブジェクトが表すエンティティ(クラス、インタフェース、配列クラス、プリミティブ型、またはvoid)の名前をStringとして返します。このクラスオブジェクトが配列型ではない参照型を表す場合「Java™言語仕様」で指定されているように、クラスのバイナリ名が返されます。getTypeName()
"このタイプの名前のための有益な文字列を返します。"
それは、私はこれらのいずれかを望んでいないことをかなり明白です:
getSimpleName()
:「ソースコード内で指定されたとおり、基本となるクラスの単純名を返します。」toString()
:クラス 『または「インタフェース『文字列表現が文字列である』』空白が続き、その後、クラスの完全修飾名でのgetNameによって返された形式で」
Iドンこれがプリミティブ型で動作することを期待していません。アレイでうまくいかない場合は問題ありません。私が心配している主なものは、ネストされたクラスとFoo.Bar
対Foo$Bar
です。
私はネストしています。質問が更新されました –