我有一个类型为Class
的对象c
(我在运行时掌握了该对象,所以在编译时无法判断它代表的是哪个类。)
假设c
表示类别Foo
。我现在想要获得一个代表Foo[]
的Class
实例。
如何最好地使用标准Java API?
根据http://tutorials.jenkov.com/java-reflection/arrays.html,其中一种方法是:
Class arrayClass = java.lang.reflect.Array.newInstance(c, 0).getClass();
这看起来像是一个骗局,但它绝对比玩类名称更干净。
以下是如何做到这一点的示例:
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 {
}
}
从我的测试中可以看出,这应该是可行的:
Class c = ...
Class cArr = java.lang.reflect.Array.newInstance(c, 1).getClass();