我真的不知道如何放置問題的標題。 基本上我試圖做一些棘手的東西與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