2013-06-14 20 views
7

クラス名の助けを借りて文字列形式でオブジェクトを作成することができます。私はクラス名が "Test"のようです。使用方法実行時にJavaのクラス名を使用してオブジェクトの配列を作成

Class.forName("Test").newInstance() 

このクラスのオブジェクトを作成できます。

私の質問は、クラス名を使用してオブジェクトの配列または配列のリストを作成する方法はありますか?または、クラスのオブジェクトを持っていて、このオブジェクトでそのオブジェクトの配列または配列リストを作成できるとします。

+0

はもしかして:このメソッドを呼び出すと、次のように配列を作成することと同じですか? –

+0

ArrayListは簡単です: 'new ArrayList ()' –

+0

@jon配列または配列リスト –

答えて

15

配列を作成するには、java.lang.reflect.ArrayとそのnewInstance方法を使用することができます:他のそれは正しい型の配列を返すことを表現する方法はありませんので、戻り値の型がちょうどObjectであることを

Object array = Array.newInstance(componentType, length); 

注意、それを一般的な方法にするよりも、通常はあなたがそれを望んでいないのです。 (あなたは確かにあなたのケースではありません。)あなたがint.classに合格すれば、それでも対処できません。

サンプルコード: - あなたはどのArrayListを作成できるように、型消去がArrayListは本当に、そのコンポーネントの種類を認識していないことを意味しないArrayListについては

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); 
    } 
} 

は、そのような概念は本当にあります。例:

Object objectList = new ArrayList<Object>(); 
Object stringList = new ArrayList<String>(); 

作成後、これら2つのオブジェクトは、そのタイプに関して区別できません。

+0

OPの質問は間違っているかもしれませんが、「私が作成した型の配列または配列を欲しい」と解釈します。 [] array = new Object [length] 'が実行します。 –

+0

@Heuster:それは "Object []"を作成します。これは "作成したタイプの配列"ではありません。彼が作成したタイプの参照を保持できる配列ですが、それは別の問題です。 –

+0

もちろんあなたは正しいです:) –

6

あなたはそれが法newInstance(Class, int)ありArray

Object xyz = Array.newInstance(Class.forName(className), 10); 

を使用することができます。

は、指定されたコンポーネント型と長さで新しい配列を作成します。または「配列または配列のリスト」「配列リストの配列を」

int[] x = {length}; 
Array.newInstance(componentType, x); 
+0

Array.newInstanceオブジェクトの配列でないオブジェクトを返します –

+0

はい、キャストする必要があります。 – NINCOMPOOP

+0

@WaqasAli:配列を作成しますが、メソッドのシグネチャでは表現できません。'Array.newInstance'のシグネチャは何になると思いますか? –

関連する問題