嵌套类中的反射

时间:2015-10-05 15:38:43

标签: java generics reflection nested

在尝试联系嵌套类的构造函数时,我经常捕获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单独作为公共课时,它的工作正常。

1 个答案:

答案 0 :(得分:3)

从您正在做的事情来看,您好像要将SetType声明为static

就目前情况而言,您正尝试使用SetType static方法实例化TypesForSets;也就是说,您在TypesForSets的任何实例之外执行此操作。除了封闭类的实例之外,您无法实例化非静态内部类。

如果你在自己的文件中使SetType成为一个单独的类,它的工作原理是它没有封闭的类。在另一个类中声明的静态类与顶级类非常相似。

可以使用反射来实例化一个内部(非静态)类,this question中涵盖了它,但它看起来并不像你需要的那样你的代码。