2015-10-05 71 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中已有描述,但它看起来并不像您需要的代码那样。