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