2013-04-24 48 views
2

假設我想從字符串創建一個Java對象。如何從字符串創建Java內置對象

Object obj = Class.forName("com.my.object.MyObject").newInstance(); 

我能夠創建MyObject。我的問題是如何從字符串中創建一個Java內置對象,例如Long或String。我需要這樣做,因爲我只能以文本格式知道運行時的對象類型。

我做到了這一點,但沒有奏效。

Object obj = Class.forName("java.lang.Long").newInstance(); 
+0

順便說一句:即使它是明顯的誰可以回答這個問題,大多數人爲什麼你的第二個代碼示例沒有工作,你只應避免說「這個沒在SO上工作「。給我們堆棧跟蹤和錯誤消息。最好查看錯誤消息,看看它是否有助於您解決錯誤。 – millimoose 2013-04-24 17:33:07

+0

(好的,在這種情況下的錯誤是非常無用的,但仍然。) – millimoose 2013-04-24 17:45:21

+0

感謝您的意見。下次我會添加更詳細的錯誤消息。 – codereviewanskquestions 2013-04-24 18:07:59

回答

4

閱讀文檔newInstance(),它會告訴你,它調用類的無參數的構造函數。如果內置(或其他)類具有這樣的構造函數,則可以創建它。否則,您必須使用Class.getConstructor()來調用特定的構造函數,並將相應的參數傳遞給它。因此,呼籲例如new Long(String)構造:

Class.forName("java.lang.Long") 
    .getConstructor(String.class) 
    .newInstance("12345"); 
11

java.lang.Long沒有一個無參數的構造函數,所以你不能叫newInstance這樣。相反,你必須用正確的參數來查找構造函數,構建參數數組,然後調用構造函數。

Constructor constr = Class.forName("java.lang.Long").getConstructor(String.class); 
Object myLong = constr.invoke("5"); 
相關問題