StackOverflow 的人!我正在构建一个游戏,即 Volts of Doom,用户可以在其中编写自己的 mod 并将其放入一个文件夹中,然后将其加载到游戏中(类似于 Minecraft Forge 之类的东西,除了这个游戏是为改装而设计的) .
使用 @Mod 注释声明 mod(见下文)。目前,我可以在正确的 /mods/ 目录中找到 jar 文件,然后可以找到带有 @Mod 注释的类。当我尝试从类的 @Mod 注释中读取 modid 时,就会出现问题。
我正在使用 Google Reflections,它的getTypesAnnotatedWith(Annotation.class)
方法返回一个Set<Class<?>>
带注释的类,但由于元素是 type Class<?>
,而不是 type @Mod
,我无法访问那个必要的值。
当我尝试检索 modid 或将类转换为可以访问 modid 的格式时,如果我得到的只是编译器错误和 ClassCastExceptions,我该如何检索该值?我理解为什么会发生异常(不能将超类转换为子类等),但我找不到解决方案....有什么想法吗?
我将提供一个我目前正在使用的无效代码示例。
//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 :(