首页 > 解决方案 > 使用数组类型参数通过 Class.forName 初始化一个类

问题描述

我有一个带有构造函数的类,我需要按名称对其进行初始化。

public class Wall extends Tile 
{
    public Wall(double x, double y, double[] data) 
    {
        super();
    }
}

Tile 是一个抽象类,它的构造函数是空的。

我可以初始化这个类

Class.forName("Wall").newInstance();

如果我想在启动类时传递参数,我可以使用

Constructor<?> c = Class.forName("Wall").getConstructor(param);

c.newInstance(Paramater values ie. "String");

至于param,这取决于您传递的参数类型。

intInteger.TYPE

doubleDouble.TYPE

StringString.class

这篇关于 stackoverflow 的帖子帮助我处理了这些 参数

但我的问题是如何传递数组参数。即一个double[]

我试过Double[].class了,但那抛出了一个ThreadNotFoundException.

任何帮助,将不胜感激。

标签: javaclassparametersinitialization

解决方案


它可能有更好的方法。但我已经测试过它并且它有效:

Constructor<?> constr = Class.forName("Wall").getDeclaredConstructor(Double.TYPE, Double.TYPE, (new double[] {}).getClass());
double x = 1;
double y = 2;
double[] data = new double[] {1, 2, 3, 4};
Wall obj = (Wall) constr.newInstance( x , y, data );

推荐阅读