Java8、Google反射——获取注释类型作为注释列表,而不是类<&燃气轮机;

Java8、Google反射——获取注释类型作为注释列表,而不是类<&燃气轮机;,java,classcastexception,reflections,Java,Classcastexception,Reflections,堆垛机!我正在构建一个游戏,即《末日之伏》,在这个游戏中,用户可以编写自己的mod并将其放入一个文件夹中,然后将其加载到游戏中(类似于Minecraft Forge,除了这个游戏是为了修改而设计的) mod是用@mod注释声明的(见下文)。目前,我可以在正确的/mods/目录中找到jar文件,然后可以找到用@Mod注释的类。当我试图从类的@Mod注释中读取modid时,问题就出现了 我使用的是Google Reflections,它的getTypesAnnotatedWith(Annotatio

堆垛机!我正在构建一个游戏,即《末日之伏》,在这个游戏中,用户可以编写自己的mod并将其放入一个文件夹中,然后将其加载到游戏中(类似于Minecraft Forge,除了这个游戏是为了修改而设计的)

mod是用@mod注释声明的(见下文)。目前,我可以在正确的/mods/目录中找到jar文件,然后可以找到用@Mod注释的类。当我试图从类的@Mod注释中读取modid时,问题就出现了

我使用的是Google Reflections,它的
getTypesAnnotatedWith(Annotation.class)
方法返回一个
Set
,而不是类型
@Mod
,我无法访问必要的值

当我试图检索modid或将类强制转换为可以访问modid的格式时,如果我得到的只是编译器错误和ClassCastException,那么如何检索该值?我理解为什么会发生异常(无法将超类转换为子类等),但我找不到解决方案。。。。有什么想法吗

我将提供一个不工作的代码,我目前正在为此使用的样本

//Make the annotation available at runtime:
@Retention(RetentionPolicy.RUNTIME)

//Allow to use only on types:
@Target(ElementType.TYPE)

public @interface Mod {
    String modid();
}
Reflections Reflections=new Reflections(新的URLClassLoader(“我的类加载器”)、新的子类加载器(false)、新的类型注释加载器();
设置<代码>设置
Reflections reflections = new Reflections(new URLClassLoader("My Class Loader")), new SubTypesScanner(false), new TypeAnnotationsScanner());

Set<Class<?>> set = reflections.getTypesAnnotatedWith(Mod.class);

//cannot access modid from this set :(
Set<Class<?>> set = reflections.getTypesAnnotatedWith(Mod.class);
for(Class<?> clazz : set) {
   Mod mod = clazz.getAnnotation(Mod.class);
   mod.modid();
}