2012-03-28 5 views
1

Classのオブジェクト(Class)を持っています(私は実行時にオブジェクトを保持しているので、どのクラスを表すのかはコンパイル時には分かりません)。Foo.classを与えてFoo.classを取得します

cがクラスFooを表していると仮定します。私は今Foo[]を表しClass -instanceのホールドを取得したいです。

は、これはどのように標準のJava APIを使用して最高の行われていますか?私は、これは動作するはずです、私のテストで見ることができるものから、

+1

私はあなたがあなたの意図の簡単な例を提供する必要があるとしていると思う、それは... – Nim

+1

のhttp質問から非常に明確ではありません:/ /stackoverflow.com/questions/77387/how-to-instantiate-a-java-array-given-an-array-type-at-runtime –

+0

はい、上記はうまくいきます - しかし、もしそれをする必要があれば、大部分のケースはあなたが間違って設計されたアプリケーションを持っている(すなわち、多形性は通常、必要なものすべてを適切に処理します) – scibuff

答えて

3

http://tutorials.jenkov.com/java-reflection/arrays.htmlによると、次のいずれかの方法がある:

Class arrayClass = java.lang.reflect.Array.newInstance(c, 0).getClass(); 

これはチートのように見えますが、それは間違いですクラス名前で遊んよりもきれい。ここで

0

Class c = ... 
Class cArr = java.lang.reflect.Array.newInstance(c, 1).getClass(); 
1

はこれを行う方法の例です:

import java.lang.reflect.Array; 
public class ReflectTest { 
    public static void main(String[] args) { 
     Foo c = new ReflectTest().new Foo(); 
     Foo[] foos = (Foo[]) Array.newInstance(c.getClass(), 5); 
    } 
    class Foo { 
    } 
} 
+0

'c'は私の質問では' Class'型ですが、あなたが目指しているものを見ています。 – aioobe

関連する問題