从类名数组中创建类

时间:2013-08-08 00:58:01

标签: java arrays class return classname

在Java中如何创建类定义数组并从该数组创建类?

List<Class> blockArray = new Array<Class>();
blockArray.add(LTetrino.class);

我遇到了这个问题,如何从类名创建类?

public Tetrino getBlock(int x, int y)
{
    // return new LTetrino(x, y); OLD CODE
    return new blockArray.get(blah);
}

我很确定我在这里做错了什么。 提前谢谢。

1 个答案:

答案 0 :(得分:3)

请参阅Class.newInstance()

例如:

List<Class> blockArray = new ArrayList<Class>();
blockArray.add(LTetrino.class);

// then instantiate an object of the class that was just added
LTetrino block = blockArray.get(0).newInstance();

如果类构造函数接受参数,则可以使用Class的getConstructor()方法来检索相应的构造函数,并调用它(它在上面的文档中链接),例如: (假设LTetrino是静态/顶级类,并且其构造函数采用两个int参数):

Class<? extends LTetrino> cls = blockArray.get(0);
// get constructor
Constructor<? extends LTetrino> ctor = cls.getConstructor(int.class, int.class);
// instantiate by invoking constructor
LTetrino block = ctor.newInstance(x, y);

顺便说一下,我建议不要在Class中使用泛型类型:

List<Class<? extends LTetrino>> blockArray = new ArrayList<Class<? extends LTetrino>>();
blockArray.add(LTetrino.class);

或者至少:

List<Class<?>> blockArray = new ArrayList<Class<?>>();
blockArray.add(LTetrino.class);