【问题标题】:Initialize A Class by Class.forName with Array type parameters使用数组类型参数通过 Class.forName 初始化一个类
【发布时间】:2020-10-01 16:42:57
【问题描述】:

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

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,就看你传递的是什么类型的参数了。

int:Integer.TYPE

double : Double.TYPE

String : String.class

stackoverflow 上的这篇文章帮助我处理了这些参数 Initializing a class with Class.forName() and which have a constructor which takes arguments

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

我尝试过Double[].class,但抛出了ThreadNotFoundException

任何帮助将不胜感激。

【问题讨论】:

  • 你能提交“NAME”类吗?或者至少发布它的构造函数代码
  • 是的。这对上下文很有用。帖子已更新以包含该课程。
  • 我想这里真正的问题是“为什么?”。您正在使您的代码变得超级复杂,使用在 Java 世界中通常不被接受的方法。解释你为什么要这样做,也许我们可以找到一种方法让它变得更简单?
  • 我已经在帖子中解释了我需要帮助的地方。我不需要解释“为什么”我这样做。我只是。

标签: java class parameters initialization


【解决方案1】:

也许有更好的方法。但我已经测试过了,它可以工作:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-05
    • 2019-06-25
    • 1970-01-01
    • 2021-04-25
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多