gpt4 book ai didi

java - 即使我有一个以 Object 作为参数的公共(public)构造函数,构造函数反射也不接受 Map 或 List 参数

转载 作者:行者123 更新时间:2023-12-01 18:10:08 24 4
gpt4 key购买 nike

我有一个类,其构造函数重载如下

   public LoggingTest(String a) {
System.out.println("string ");
}

public LoggingTest(Object a) {
System.out.println("object");
}
public LoggingTest(String a, Object b) {
System.out.println("string and object");
}

public LoggingTest(String a, String b) {
System.out.println("string and String");
}

我想动态创建 LoggingTest 类的实例。为此,我使用下面的构造函数反射代码。

对象[] objArray = {obj1, obj2};

    if (objArray.length == 1) {
Constructor<LoggingTest> cons = LoggingTest.class.getConstructor(objArray[0].getClass());
cons.newInstance(objArray[0]);
} else if (objArray.length == 2) {
Constructor<LoggingTest> cons = LoggingTest.class.getConstructor(objArray[0].getClass(),objArray[1].getClass());
cons.newInstance(objArray[0], objArray[1]);
}

当我经过这里时 Object[] objArray = {"abc", "abc"); //works fine and prints "string and字符串”到控制台

但是当我通过

 Object[] objArray = {"abc", new ArrayList<String>()); //dint work. 

预期将“字符串和对象”打印到控制台..但给出了异常

java.lang.NoSuchMethodException: com.citigroup.digital.ccp.ccs.utils.LoggingTest.<init>(java.lang.String, java.util.ArrayList)
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.getConstructor(Class.java:1825)
at com.citigroup.digital.ccp.ccs.utils.LoggingTest.main(LoggingTest.java:42)

如果我创建另一个使用 String 和 ArrayList 作为参数的构造函数,但我不希望这样做,则相同的场景将起作用,因为我不确定参数的类型是什么。所以我把它作为对象。

非常感谢任何帮助。

最佳答案

当您执行以下操作时,您需要一个带有签名(String、ArrayList)的构造函数:

Constructor<LoggingTest> cons = 
LoggingTest.class.getConstructor(
objArray[0].getClass(),objArray[1].getClass());

这是因为数组中的第二个元素是 ArrayList(您可以打印 objArray[1].getClass() - 它会打印 ArrayList)。由于没有将 ArrayList 作为第二个参数的构造函数,因此您会看到错误。

将行更改为:

Constructor<LoggingTest> cons = 
LoggingTest.class.getConstructor(
String.class, Object.class);

这应该有效。

关于java - 即使我有一个以 Object 作为参数的公共(public)构造函数,构造函数反射也不接受 Map 或 List 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33654462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com