2010-12-18 42 views
3

可能重複一個內部類:
Java: How to load a class (and its inner classes) that is already on the class path?如何創建一個實例,如果有getConstructor()

有人能幫助我瞭解如何創建使用getConstructor一個內部類的一個實例。

這是我現在在哪裏。

import java.lang.reflect.*; 

public class Outer{ 
public Outer(int i){ 
//things to do 
} 
public class Inner{ 
Class<?>[] type = new Class<?>[1]; 
Class<?> myClass; 
    public Inner(int i){ 
    //stuff and code 
    } 

    public void task(){ 
    type[0] = Integer.class; 
    try{ 
     myClass = Class.forName("Outer$Inner"); 
     Constructor construct = myClass.getConstructor(type); 
     Object i = construct.newInstance(new Integer(43)); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    } 
} 

public static void main(String[] args){ 
Outer outer = new Outer(new Integer(21)); 
Inner inner = outer.new Inner(new Integer(22)); 
inner.task(); 
} 

}

錯誤信息

java.lang.NoSuchMethodException: Outer$Inner.<init>(java.lang.Integer) 
at java.lang.Class.getConstructor0(Class.java:2706) 
at java.lang.Class.getConstructor(Class.java:1657) 
at Outer$Inner.task(Outer.java:18) 
at Outer.main(Outer.java:30) 

對不起,如果我失去了一些東西明顯 如果我能想出解決辦法,我想從一個txt文件獲取輸入,並使用字符串創建對象。

+0

這個問題在鏈接的問題沒有解決。 – James 2010-12-18 05:48:03

回答

5

如果將InnerClass更改爲靜態類,它會工作嗎?

如果它不是靜態的內部類,它通常需要Outer類的上下文來創建內部類。我相信你需要外部實例傳遞給構造 - 讓我拔出我的後隨機參考:

http://jroller.com/tomdz/entry/reflection_inner_classes

+0

它確實幫我改變了一個內在的類到靜態(感謝詹姆斯從2010年) – drorsun 2015-08-24 12:55:27

+0

@drorsun - 不客氣 - 詹姆斯從2015年 – James 2015-08-27 02:51:13

相關問題