Маркер-интерфейс — это интерфейс, который не содержит методов и полей данных. Он служит тегом или сигналом для компилятора и runtime, что класс, который его реализует, имеет определённые характеристики или возможности.
Самые известные маркер-интерфейсы в Java включают:
Serializable — указывает, что объект можно преобразовать в поток байтовCloneable — указывает, что объект можно клонировать или скопироватьRemote — указывает, что объект доступен удалённо через RPCМаркер-интерфейсы дают несколько ключевых преимуществ:
Когда класс реализует маркер-интерфейс, он по сути заключает контракт или обещание о своём поведении, хотя никакие конкретные методы реализовывать не нужно.
public class MySerializableClass implements Serializable {
private String data;
// реализация класса
}
В этом примере реализация Serializable говорит JVM, что объекты MySerializableClass можно сериализовать, хотя никакие методы явно не требуются.
Хотя маркер-интерфейсы всё ещё используются, в современной Java-разработке иногда предпочитают аннотации (как @FunctionalInterface), потому что они точнее выражают намерение и дают больше гибкости без необходимости наследования.
Marker interface обязательно должен содержать хотя бы один abstract метод, чтобы сигнализировать компилятору о своём назначении, даже если этот метод никогда не будет реализован подклассами.
Новый — ещё не проверен сообществом
Вы