StackOverflow-ERS! Я создаю игру, а именно Volts of Doom, в которой пользователи могут писать и помещать свои собственные моды в папку, которая затем будет загружена в игру (аналогично Minecraft Forge, за исключением того, что эта игра предназначена для модификации). .
Мод объявлен с аннотацией @Mod (см. Ниже). В настоящее время я могу найти файл jar в правильном каталоге / mods /, а затем найти классы, помеченные @Mod. Проблема возникает, когда я пытаюсь прочитать модид из аннотации @Mod классов.
Я использую Google Reflections, чей метод getTypesAnnotatedWith(Annotation.class)
возвращает Set<Class<?>>
аннотированных классов, но поскольку элементы имеют тип Class<?>
, а не тип @Mod
, я не могу получить доступ к этому необходимому значению.
Как я могу получить это значение, если все, что я получаю, это ошибки компилятора и ClassCastExceptions, когда я пытаюсь получить Модид или приведение класса к формату, из которого я могу получить доступ к модиду? Я понимаю, почему возникают исключения (не может привести суперкласс к подклассу и т. Д. c), но я не могу найти решение ... Любые идеи?
Я приведу образец неработающий код, который я сейчас использую для этого.
//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 :(