Маркерный интерфейс или аннотации? - PullRequest
3 голосов
/ 01 декабря 2011

Мне нужно пометить некоторые классы как Invokable - просто сказать, что я могу вызывать методы класса, используя отражение.Но мне не нравится идея иметь пустой интерфейс только для этой цели.Можно ли это сделать с помощью аннотаций и при этом сохранить поведение в приведенном ниже примере?(Я никогда не создавал свои собственные аннотации, поэтому я не знаком с ними подробно)

Example

class ClassOne implements Invokable {
}

class ClassTwo implements Invokable {
}

void someMethod(Invokable inv) {
}

Ответы [ 3 ]

6 голосов
/ 01 декабря 2011

Из-за someMethod вы не можете использовать аннотации. Возможно, позже вы обнаружите, что Invokable могут понадобиться полезные методы в любом случае.

Кроме того, не забудьте проверить уже существующие интерфейсы, такие как Callable, Future и т. Д., Прежде чем заново изобретать колесо.

2 голосов
/ 01 декабря 2011

решение будет зависеть от того, как вы собираетесь использовать эти классы. если у вас много классов, некоторые из которых Invokable, а некоторые нет, вам лучше использовать аннотации, просто передайте объекты / классы и проверьте наличие аннотации. если вы знаете, что все передаваемые вами классы будут Invokable, вы можете использовать маркерный интерфейс.

т.е. при условии, что вы хотите сохранить только поведение, а не метод: -)

2 голосов
/ 01 декабря 2011

Вы можете получить аннотации класса mit Class.getAnnotations () и выполнить поиск аннотации Invokable.Затем вы можете получить метод, который хотите вызвать, и вызвать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...