我試圖使用Reflection來聲明ArrayList
。下面是我的代碼NoSuchMethodException java.lang.Integer的參數在構造函數中傳遞(Reflection)
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException {
String intClass="java.lang.Integer"; //This string will be replaced by a string taken from user which will be a class name.
Class classOf=Class.forName("java.util.ArrayList");
Class[] parameterslist ={Class.forName(intClass)};
Constructor constructorOfClass=classOf.getConstructor(parameterslist);
}
當我運行這段代碼,我得到
Exception in thread "main" java.lang.NoSuchMethodException: java.util.ArrayList.<init>(java.lang.Integer)
當我修改parameterslist作爲
Class[] parameterslist={int.class}
它的工作原理,但我必須考慮的參數類的名稱從用戶輸入,所以我不能直接寫int.class
。
我已經搜索了Class.forName()
和Classname.class
之間的區別,但像this這樣的答案認爲它們是相同的。 我只想知道爲什麼我們不能使用Class.forName()
對象作爲參數傳遞給ArrayList
構造函數,當我編寫int.class
時它是如何工作的?如果Class.forName()
不是正確的方法,那麼我們如何才能將一個類名的對象作爲用戶的輸入?
嗯,有一些原始類型。如果我是你,我會創建一個映射,並使用基本類型的名稱作爲鍵和相應的'Class'對象作爲值。 – Sweeper
@Sweeper你是對的。這將解決問題,但仍然爲什麼我們不能爲此使用Class.forname? – Ahsan
我不明白。您已將類名java.lang.Integer硬編碼到此代碼中。用戶輸入來自哪裏?或'Class.forName()'?這裏''Class.forName()'唯一的錯誤是你提供給它的參數。不清楚你在問什麼。 – EJP