gpt4 book ai didi

java - 使用反射调用类内部的构造函数

转载 作者:行者123 更新时间:2023-12-02 00:50:39 26 4
gpt4 key购买 nike

我正在尝试使用反射调用包内类中的构造函数。我收到异常“java.lang.NoSuchMethodException:”

下面是代码。

public class constructor_invoke {
public static void main(String args[]) throws ClassNotFoundException, NoSuchMethodException
{
Method m = null;
Class c = Class.forName("org.la4j.demo7");
Constructor[] cons = null;
cons=c.getConstructors();
m = c.getMethod(cons[0].getName());
m.invoke(c.newInstance());
}
}

demo7.java

public class demo7 {
String a="df";
public void demo7()
{
String getval2=a+"dfd";
System.out.println(getval2);
}
}

调用 demo7 类中的 demo7 构造函数并打印值 dfdfd 的预期结果。抛出异常“java.lang.NoSuchMethodException: org.la4j.demo7.org.la4j.demo7()”

最佳答案

这不是通过反射调用构造函数的方式。您需要调用newInstance(...)直接来自Constructor对象。

鉴于此类:

/* Test class with 2 constructors */
public static class Test1{
public Test1() {
System.out.println("Empty constructor");
}

public Test1(String text) {
System.out.println("String constructor: " + text);
}
}

您需要通过将参数类型指定为getConstructor(...)来获取您想要的构造函数。 ,或者像您所做的那样,获取 Constructor[] 的数组并选择您想要的一个(当您有多个构造函数时会困难得多)。

public static void main(String[] args) throws Exception {
Object result = null;

// Get the class by name:
Class<?> c = Class.forName("testjavaapp.Main$Test1");

// Get its 2 different constructors:
Constructor<?> conEmpty = c.getConstructor(); // Empty constructor
Constructor<?> conString = c.getConstructor(String.class); // Constructor with string param

// Now invoke the constructors:
result = conEmpty.newInstance(); // prints "Empty constructor"
result = conString.newInstance("Hello"); // prints "String constructor: Hello"

// The empty constructor (but not others) can also be invoked
// directly from the Class object.
// --NOTE: This method has been marked for deprecation since Java 9+
result = c.newInstance(); // prints "Empty constructor"
result = c.newInstance("Hello"); // !! Compilation Error !!
}

关于java - 使用反射调用类内部的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57861493/

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