【问题标题】:create class from array of classnames从类名数组创建类
【发布时间】:2013-08-09 14:08:13
【问题描述】:

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

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

【问题讨论】:

    标签: java arrays class return classname


    【解决方案1】:

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

    【讨论】:

    • 我将如何使用 newInstance();使用 x 和 y 类的构造函数参数?
    • 正如我所提到的,为此,newInstance() 是不够的,您必须使用 getConstructor() 找到合适的构造函数并调用它。稍后我将添加一个示例,同时我建议查看链接文档中的 getConstructor() 方法。
    • 你去。确保将适当的类型传递给与对象的构造函数匹配的 getConstructor()。
    • 不客气。如果您认为这是正确的答案,如果您单击复选标记并将其标记为答案,我将不胜感激。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2019-05-19
    • 2022-06-22
    • 1970-01-01
    • 2018-01-13
    • 2011-10-27
    相关资源
    最近更新 更多