Я думал об этом, но не мог отбросить его сразу, почему мы даже реализуем интерфейсы Marker для нашего класса, даже если они не содержат никаких методов. Пожалуйста, дайте мне знатьПочему мы реализуем интерфейс маркеров, даже если они не содержат каких-либо методов?
ответ
Для обвинителя. так же, как: Интерфейс A, орудие B. обычно используется A. В весеннем каркасе это знакомо
Давайте возьмем пример: Сериализуемый.
Если вы попытаетесь сериализовать объект, механизм сериализации Java будет генерировать исключение, если ваш объект не является экземпляром Serializable. Чтобы сделать его экземпляром Serializable, класс объекта должен реализовать интерфейс Serializable, даже если этот интерфейс не содержит никакого метода. Только так, что
o instanceof Serializable
является верным, а не ложным.
Интерфейс маркера используется в качестве тега для сообщения сообщения в java-компиляторе, чтобы он мог добавлять особое поведение к классу, реализующему его.
Внимательно изучите интерфейс маркера в Java, например. Serializable, Clonnable и Remote выглядит так, что они используются для указания компилятора или JVM. Поэтому, если JVM видит, что класс Serializable, он сделал некоторую специальную операцию на нем, аналогично, если JVM видит, что один класс реализует Clonnable, он выполняет некоторую операцию для поддержки клонирования.
Нет, компилятор не заботится об этом и не добавляет никакого bhavior в класс, реализующий интерфейс маркера. –
Маркерные интерфейсы как подсказка названия используются только для индикации, и они отмечают класс, реализующий этот интерфейс.
Теперь в вашем коде вы можете выполнять некоторые действия на него, как (instance instanceof Marker)
На большинстве мест Аннотации может быть использована для маркеров
Например, если @Test
на классе показывает, что этот класс является тестом класса и должен выполняться. То же самое можно достичь с помощью интерфейса.
@Test //sort of marking
class ClassToTest{
}
или
class ClassToTest implements Test{
}
Приведенные выше примеры являются синонимами в том, что они пытаются достичь.
Для проверки присутствия в первом случае вы попытаетесь проверить наличие аннотации @Test
, а во втором случае вы сделаете отметку instanceof
.
С маркерных интерфейсов вы также получаете преимущество, что если вы храните все экземпляры теста, то вы можете иметь безопасный сбор типа List<Test>
или если вы хотите, чтобы сделать безопасный метод типа, который будет принимать только экземпляры Test
void method(Test testInstance){
}
- 1. почему мы реализуем интерфейс для абстрактного класса
- 2. Почему мы реализуем интерфейсы?
- 3. Почему мы реализуем интерфейсы рекурсивно?
- 4. Наследуем интерфейс или реализуем интерфейс?
- 5. как выход, когда мы реализуем интерфейс Servlet
- 6. Как мы реализуем Overlaying?
- 7. Почему базовые типы .Net Framework не содержат реализаций методов IConvertible?
- 8. Наследуем ли мы или реализуем абстрактные классы?
- 9. Использование регулярного выражения для соответствия строкам, если они содержат «MSIE», но НЕ, если они содержат «Opera»
- 10. Почему значения карты меняются, даже если они не указатели - Golang
- 11. Почему мои скрипты python не обновляются, даже если они сохранены?
- 12. Почему некоторые ячейки изменяются, даже если они не выполняют условие?
- 13. Почему мы объявляем класс абстрактным, даже если он не имеет абстрактных методов?
- 14. Как мы можем создать объект соединения, даже если это интерфейс?
- 15. Интерфейс Java: если мы внедрим встроенный интерфейс в java, как мы можем получить результаты методов из этого интерфейса?
- 16. значения, которые не равны, даже если они
- 17. Модификации Не работают, даже если они загружены
- 18. Почему мы реализуем View.OnClickListener, если нам нужно установить android: onClick в любом случае?
- 19. Как удалить ячейки, если они содержат нуль
- 20. Удаление ячеек, если они содержат 0
- 21. .htaccess перенаправления, если они содержат подстроку
- 22. Удалить все элементы, если они содержат строку
- 23. Как вставить данные, если они содержат апостроф?
- 24. Почему функции огурца продолжают работать, даже если они терпят неудачу?
- 25. Почему мы используем бесконтактный интерфейс?
- 26. Удаление элементов из списка, если они не содержат строку
- 27. захватить все символы внутри {...}, если они не содержат «{» и «}»
- 28. Как скрыть вложенные отчеты, если они не содержат данных?
- 29. регулярное выражение: не совпадают, если они содержат определенную строку
- 30. jQuery скрыть кнопки, если они не содержат текст
Thanks Anjan, проверит его со следующего. – Nani
@Nani stackoverflow имеет очень мощную [поисковую систему] (http://stackoverflow.com/search?q=%5Bjava%5D+marker+interface). – assylias
@assylias спасибо. – Nani