Вы не можете использовать new XX()
в аннотации.Параметры аннотаций могут использовать очень специфический набор типов:
- примитив
- String
- Класс
- Enum
- другая аннотация
- массив любого из вышеперечисленных
См. этот ответ .
Итак, чтобы выполнить то, что выпытаясь выполнить, вам нужно будет использовать класс.
Затем вам придется использовать отражение, чтобы создать экземпляр и вызвать метод.
Class<?> clazz = annotation.ref();
I instance = (I) cls.getConstructor().newInstance();
instance.m1();
См. этот ответ .
Все ваши классы должны иметь конструкторы без аргументов, иначе вы сможете создавать только некоторые экземпляры таким способом, но не другие (что приведет к условному переходу на основе класса).