This question already has answers here:
How to instantiate an inner class with reflection in Java?
                                
                                    (2个答案)
                                
                        
                4年前关闭。
            
        

在尝试接触嵌套类的构造函数期间,我经常遇到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

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

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

可以使用反射实例化一个内部(非静态)类,该类已在this question中进行了介绍,但看起来这并不是您的代码所需要的。

07-24 15:17