文字列形式のクラス名を使用してオブジェクトを作成できることは誰もが知っています。クラス名「Test」があるように。使用する
Class.forName("Test").newInstance()
そのクラスのオブジェクトを作成できます。
私の質問は、クラス名を使用してオブジェクトの配列または配列リストを作成する方法があるということです?? または、クラスのオブジェクトがあり、このオブジェクトを使用して、そのオブジェクトの配列または配列リストを作成できるとします。
配列を作成するには、次のjava.lang.reflect.Array
メソッドnewInstance
を使用できます。
Object array = Array.newInstance(componentType, length);
戻り値の型は、それをジェネリックメソッドにする以外に、正しい型の配列を返すことを表現する方法がないという理由だけであることに注意してくださいObject
...通常、それは望ましくありません。(あなたの場合は確かにそうではありません。)それでも、渡した場合は対応しませんint.class
。
サンプルコード:
import java.lang.reflect.*;
public class Test {
public static void main(String[] args) throws Exception {
Object array = Array.newInstance(String.class, 10);
// This would fail if it weren't really a string array
String[] afterCasting = (String[]) array;
System.out.println(afterCasting.length);
}
}
には、そのArrayList
ような概念はありません。タイプの消去は、ArrayList
がそのコンポーネント タイプを本当に認識していないことを意味するため、任意の ArrayList
を作成できます。例えば:
Object objectList = new ArrayList<Object>();
Object stringList = new ArrayList<String>();
作成後、これらの 2 つのオブジェクトは型の点で区別できません。
配列を使用できます
Object xyz = Array.newInstance(Class.forName(className), 10);
メソッドnewInstance(Class, int)があります。
指定されたコンポーネント タイプと長さで新しい配列を作成します。このメソッドを呼び出すことは、次のように配列を作成することと同じです。
int[] x = {length};
Array.newInstance(componentType, x);