2015-10-05 76 views
0

在嘗試伸出嵌套類的構造函數時,我總是捕獲NoSuchMethodException TypesForSets$SetType.<init>(int)。我有代碼:在嵌套類中的反射

public class TypesForSets { 
     static <T> Set<T> fill(Set<T> set, Class<T> type) { 
      try { 
       for (int i = 0; i < 10; i++) 
        set.add(type.getConstructor(int.class).newInstance(i)); 
      } catch (Exception e) { 
       throw new RuntimeException(e); 
      } 
      return set; 
     } 

     static <T> void test(Set<T> set, Class<T> type) { 
       fill(set, type); 
     } 

     public static void main(String[] args) { 
       test(new HashSet<SetType>(), SetType.class); 
     } 

     class SetType { 
      int i; 

      public SetType(int n) { 
       i = n; 
      } 
     } 
    } 

當我把SetType單獨作爲它的作品就好了公共類。

回答

3

從你正在做的事情看,好像你想宣佈SetTypestatic。按照事實,你試圖從TypesForSetsstatic方法實例化SetType;也就是說,你在TypesForSets的任何實例外進行。除了包含類的實例外,您不能實例化非靜態內部類。

如果您在自己的文件中使SetType爲單獨的類,它的工作原因是它沒有包含類。在另一個類中聲明的靜態類非常類似於頂級類。

可以使用反射來實例化一個內部(非靜態)類,這在this question中已有描述,但它看起來並不像您需要的代碼那樣。