嵌套类中的反射



在尝试接触嵌套类的构造函数时,我不断捕获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单独作为公共类时,它工作得很好。

从您正在做的事情来看,似乎您想将SetType声明为static

就目前情况而言,你试图从TypesForSetsstatic方法实例化SetType;也就是说,您在TypesForSets的任何实例之外执行此操作。除非从封闭类的实例中,否则不能实例化非静态内部类。

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

可以使用反射来实例化一个内部(非静态)类,这在这个问题中也有涉及,但是看起来这并不是您的代码所需要的。

相关内容

  • 没有找到相关文章

最新更新