Sobes.tech
Junior

Czym są klasy anonimowe w Java i gdzie mogą być stosowane?

sobes.tech AI

Odpowiedź od AI

Klasy anonimowe w Javie to klasy lokalne bez nazwy. Są deklarowane i tworzone jednocześnie. Zazwyczaj są używane, gdy potrzebna jest jednorazowa implementacja interfejsu lub rozszerzenie klasy abstrakcyjnej lub zwykłej.

Zastosowania klas anonimowych:

  • Obsługa zdarzeń w GUI: Często używane do tworzenia obsługi kliknięć przycisków lub innych działań użytkownika.

    // Przykład z Swing ActionListener
    JButton button = new JButton("Kliknij mnie");
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("Przycisk naciśnięty!");
        }
    });
    
  • Implementacja interfejsów z jednym metodą abstrakcyjną (interfejsy SAM): Przed pojawieniem się wyrażeń lambda, był to główny sposób implementacji funkcjonalności dla takich interfejsów.

    // Przykład z Runnable
    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("Wątek uruchomiony");
        }
    }).start();
    
  • Tworzenie obiektów "na żywo": Gdy trzeba szybko utworzyć obiekt z zmienionym zachowaniem w stosunku do istniejącej klasy bez konieczności tworzenia osobnej nazwanego klasy.

    // Przykład rozszerzenia klasy abstrakcyjnej
    AbstractList<String> cityList = new AbstractList<String>() {
        private String[] cities = {"Moskwa", "Sankt Petersburg"};
    
        @Override
        public String get(int index) {
            return cities[index];
        }
    
        @Override
        public int size() {
            return cities.length;
        }
    };
    System.out.println(cityList.get(0)); // Wypisze: Moskwa
    

Klasy anonimowe mają dostęp do zmiennych lokalnych finalnych lub efektywnie finalnych w zakresie, w którym są zadeklarowane. Nie mogą mieć członków statycznych i nie mogą być abstrakcyjne lub finalne.