Java 8, Google Reflections -- 获取注释类型作为注释列表,而不是 Class<?>

Java 8, Google Reflections -- Get Annotated Types as List of Annotations, not Class<?>

Whosebug 人员!我正在构建一个名为 Volts of Doom 的游戏,用户可以在其中编写自己的 mods 并将其放入一个文件夹中,然后将其加载到游戏中(类似于 Minecraft Forge,除了这个游戏是设计为 modded)。

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

我正在使用 Google Reflections,它的 getTypesAnnotatedWith(Annotation.class) 方法 returns 一个 Set<Class<?>> 注释 classes,但是因为元素是类型Class<?>,而不是类型 @Mod,我无法访问那个必要的值。

如果我在尝试检索 modid 或将 class 转换为可以访问 modid来自?我明白为什么会出现异常(无法将 superclass 转换为 subclass,等等),但我找不到解决方案....有什么想法吗?

我将提供我目前为此使用的无效代码示例。

//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(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();
}