java - 从类名数组创建类

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

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

最佳答案

参见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);

关于java - 从类名数组创建类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18116252/

相关文章:

java - 如何在spring jpa中使用to转换器

java - 构造java类(最佳实践)

java - 有没有办法让lombok在使用@Getter @Setter注释时在null的情况下创建一个对象?

java - Android - 在 ImageView 中使用大图像或使用不同大小的图像

Python,当类型(a)仍然是A时如何处理A(a)

c# - Array.Sum() 导致溢出

java - 等同于在 Java 中递增 C/C++ 指针?

java - 无法将元素添加到 JavaFX 中的 ObservableList (UnsupportedOperationException)

python 不同模块的类继承

python - 作为实例方法调用时行为不同的类方法?