[РЕДАКТИРОВАТЬ ОТВЕТ]: Короткий ответ: то, что я хочу сделать, невозможно.Мой вопрос немного вводит в заблуждение.Я узнал, что шаблон Marker Interface на самом деле является тем, что я назвал помеченными аннотациями в моем вопросе (поскольку создаваемая вами аннотация на самом деле является интерфейсом).И проверки на это могут быть сделаны только во время выполнения.Так что, если вы хотите сделать проверку времени компиляции с аннотациями, это просто невозможно.Пустой интерфейс - единственный вариант.Проверьте ответ, чтобы увидеть, как это сделать во время выполнения.
Я стараюсь избегать использования интерфейсов маркеров в пользу помеченных аннотаций.По сути, я хочу, чтобы куча классов была помечена этой аннотацией, и передать экземпляры этих классов методам, которые принимают этот тип .Вот мой код:
АННОТАЦИЯ НА МАРКЕР:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Message {
}
КЛАСС:
@Message
public class MessageTypeA {
}
МЕТОД:
public class DatabaseWriter {
public void save(Message msg) {
//some code
}
}
код вызова:
MessageTypeA msgA = new MessageTypeA();
DatabaseWriter writer = new DatabaseWriter();
writer.save(msgA);
Однако я получаю Error:(78, 23) java: incompatible types: MessageTypeA cannot be converted to Message
IЯ не уверен, что то, что я делаю, возможно, но я читал, что интерфейсы маркеров можно заменить аннотациями маркеров.Разве это не возможно в этом случае?
Спасибо