我真的不知道如何放置问题的标题。 基本上我试图做一些棘手的东西与Java反映API。 下面是我尝试做的事:Java反射调用方法“getDeclaredConstructors”
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, InstantiationException {
Scanner in = new Scanner(System.in);
String className = in.nextLine();
Class c = Class.forName(className);
Object myObj = c.newInstance();
Method m = c.getMethod("getDeclaredConstructors");
Object retn = m.invoke(myObj);
System.out.println(retn);
in.close();
}
}
我与输入测试此: java.lang.String中 我总是得到的输出:
Exception in thread "main" java.lang.NoSuchMethodException: java.lang.String.getDeclaredConstructors()
at java.lang.Class.getMethod(Class.java:1778)
at Test.main(Test.java:15)
我明白方法“ getDeclaredConstructors()“是从类Class.
有人可以告诉我,我在这里做错了什么?我所期待的是类名我给作为输入声明的构造函数的列表,在这种情况下:java.lang.String
编辑:我应该更详细的我的问题。 我知道我可以执行c.getDeclaredConstructors(),但事实并非如此。
这只是我想要构建的程序的一小部分。 在最终版本中,用户将提供一个类的名称作为输入,称为“java.lang.String”,然后它将提供他希望应用于该类的通用方法。 因此,用户将输入“getDeclaredConstructors”,我必须将该名称的方法应用于类“java.lang.String”。
我只是这样做,以了解我能如何实现这一点。
你为什么要加倍反思?你已经有'Class'对象'c'。直接调用'c.getDeclaredConstructors()'。 – RudolphEst 2015-03-02 20:17:25
因为这只是最终应用程序创建的一小部分。在最终系统中,用户输入一个类的名称,例如“java.lang.String”,然后要求在该类上执行常规方法。因此,用户可以输入:“method getDeclaredConstructors”,我必须将方法“getDeclaredConstructors”应用于用户以前输入的类。这只是为了理解我该怎么做 – luispcosta 2015-03-02 20:27:40