2016-06-19 2 views
0

Я хочу сделать апи для моей игры и запустить API в части вы делаете, вы должны иметь:Как запустить все сопряженные методы?

@GameApi 
public void run(){ 
    // what you want to do with my game 
} 


Класс GameApi выглядит следующим образом:

public @interface GameApi { 


} 

и I не знаю, как заставить основной метод запускать каждый метод в проекте с помощью аннотации GameApi. Ive также попытался положить
@Retention(RetentionPolicy.RUNTIME)
над
public @interface GameApi но когда я импортировать его, он говорит RetentionPolicy не может быть решена с переменной

+0

Является ли вопрос, как компилировать аннотацию 'GameApi' с сохранением времени выполнения или как найти классы с методами, которые содержат аннотацию? Если первое, вам просто нужно импортировать как «Сохранение», так и «RetentionPolicy»: http://pastie.org/10882762 Но я думаю, что это только часть или касательная к вопросу ... –

+1

@Nathan: if I были ли вы вместо того, чтобы полагаться на аннотации, я бы определил интерфейс, который должны реализовать ваши плагины, и откройте их с помощью описанных здесь механизмов: https://docs.oracle.com/javase/tutorial/ext/basics/spi.html –

+0

'как заставить основной метод запускать каждый метод в проекте с аннотацией GameApi. Для этого я, вероятно, буду искать ответы в исходном исходном коде Spring, так как он также использует методы, основанные на Annotation. –

ответ

2

Вы будете делать это с отражением, как:

Object x = ...; 
for (Method m : x.getClass().getDeclaredMethods()) { 
    if (m.getAnnotation(GameApi.class)!=null) { 
     m.invoke(x); 
    } 
} 
+0

Это не может работать, потому что вы не можете запустить интерфейс, а реализовать Y интерфейса X. – bilelovitch