gpt4 book ai didi

java - 嵌套类中的反射

转载 作者:行者123 更新时间:2023-12-01 22:05:02 25 4
gpt4 key购买 nike

我不断地捕捉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时单独作为公共(public)课它工作得很好。

最佳答案

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

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

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

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

关于java - 嵌套类中的反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32952475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com