在尝试联系嵌套类的构造函数时,我经常捕获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
单独作为公共课时,它的工作正常。
答案 0 :(得分:3)
从您正在做的事情来看,您好像要将SetType
声明为static
。
就目前情况而言,您正尝试使用SetType
static
方法实例化TypesForSets
;也就是说,您在TypesForSets
的任何实例之外执行此操作。除了封闭类的实例之外,您无法实例化非静态内部类。
如果你在自己的文件中使SetType
成为一个单独的类,它的工作原理是它没有封闭的类。在另一个类中声明的静态类与顶级类非常相似。
可以使用反射来实例化一个内部(非静态)类,this question中涵盖了它,但它看起来并不像你需要的那样你的代码。