[英]Java reflection calling method “getDeclaredConstructors”
我真的不知道该怎么写问题的标题。 基本上我想用Java反射API做一些棘手的事情。 我正在尝试做的是:
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”。
我只是这样做是为了了解我到底能达到什么程度。
getMethod()
返回String
的方法(在这种情况下),而不是Class
。 String
没有这种方法。
以及为什么您首先要确切地反射地调用此方法? 这是一个公共API。
我会说,您有一个正确的问题,但是用错误的方法进行了测试。 可通过其他类的对象访问java.lang.Class的方法。 为此,您可以尝试从java.lang.Object访问一种方法,如下所示,
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("hashCode");
Object retn = m.invoke(myObj);
System.out.println(retn);
in.close();
}
}
希望这对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.