Sobes.tech
Junior

Dlaczego w niektórych interfejsach nie definiuje się metod?

sobes.tech AI

Odpowiedź od AI

Interfejsy marker (marker interfaces) nie definiują metod. Służą do oznaczania klasy, wskazując na posiadanie przez nią określonej cechy lub możliwości.

Przykłady interfejsów marker:

  • java.io.Serializable: Oznacza klasę, której obiekty mogą być serializowane.
  • java.lang.Cloneable: Oznacza klasę, której obiekty mogą być klonowane (obsługują metodę clone()).
  • java.util.RandomAccess: Oznacza listy, które obsługują szybki (stały czas) dostęp losowy do swoich elementów.

Użycie interfejsów marker pozwala:

  • Identyfikować klasy: Sprawdzić typ obiektu, aby ustalić, czy należy do określonej grupy, za pomocą operatora instanceof.
    // sprawdzanie, czy obiekt jest serializowalny
    if (object instanceof Serializable) {
        // wykonywanie serializacji
    }
    
  • Zmieniać zachowanie: API mogą zmieniać swoje zachowanie w zależności od tego, czy klasa implementuje interfejs marker. Na przykład, jeśli lista implementuje RandomAccess, operacje na niej mogą być zoptymalizowane.
  • Ograniczać dostęp: Niektóre API mogą wymagać, aby przekazywane im obiekty implementowały określony interfejs marker.
  • Adnotacje: W bardziej nowoczesnych podejściach wiele scenariuszy użycia interfejsów marker realizuje się za pomocą adnotacji. Jednak interfejsy marker nadal są używane w bibliotece standardowej Java i w kodzie legacy.