-1

重複の可能性:
JavaのClass.getArrayType?

文字列で表される型のクラスを取得する必要があります。getMethodを呼び出そうとしていますが、必要なタイプの文字列のリストしかありません。

Class.forName(str)は、strが単純なクラスである場合に機能しますが、たとえば、次のような配列では機能しません。

Class<?>[] typeClasses = new Class<?>[]{Class.forName("my.type.class[]")};
Method method = someClass.getMethod(methodString, typeClasses);
4

2 に答える 2

0

問題は、例で渡す文字列がそのクラスの正しい文字列表現ではないことです。このサンプルコードは正常に実行され、trueを出力します。

String[] array = new String[] { "hello" };
Class<?> arrayClass = array.getClass();
String stringClass = arrayClass.getName();
Class<?> parsedClass;
try {
    parsedClass = Class.forName(stringClass);
} catch (ClassNotFoundException e) {
    throw new RuntimeException(e);
}
System.out.println(arrayClass.equals(parsedClass));

配列タイプを文字列として表す方法の例については、 Class#getName()のJavadocを参照してください。これらの文字列が別の場所からのものであり、どの形式を期待するかがわかっている場合は、文字列をクラスローダーが期待する形式に変換するメソッドを作成できます。

于 2013-01-14T04:15:22.660 に答える
0

Class配列型のオブジェクトを取得する1つの方法は、getClass()反射的に作成した配列インスタンスを呼び出すことです。例えば

Class someClass = Some.class;
Class someArrayClass = java.reflect.Array.newInstance(someClass, 0).getClass();

を使用することもできClass.forName()ますが、クラス名を内部形式で指定する必要があります。たとえば、のクラス名Object[]はです"[Ljava.lang.Object;"。クラス名の形式の詳細については、Class.getName()を参照してください。

于 2013-01-14T04:08:46.180 に答える