Metoda z parametrem zadeklarowanym jako final { weekly #3 }

Słówko final. To temat częstych pytań podczas rozmów rekrutacyjnych na juniorskie stanowiska. Temat wydaje się dość prosty, ale czasem ogranicza się do omówienia finalnych klas, metod i zmiennych. Ale przecież finalny może być jeszcze parametr metody.

I tu sprawa też jest bardzo prosta. Bo słowo kluczowe final oznacza to czego można się spodziewać. Czyli finalny parametr nie może zostać nadpisany, podobnie jak finalna zmienna czy metoda. Nie oznacza to oczywiście, że nie możemy modyfikować takiego finalnego obiektu przekazanego do metody, np. poprzez użycie seterów. Nie możemy jednak takiego obiektu nadpisać, czyli przypisać mu innego obiektu lub go usunąć (przypisać mu null). Innymi słowy nie możemy zmienić referencji takiemu obiektowi. Natomiast dla typów prostych natomiast nie możemy przypisać im innej wartości. Oto prosty przykład:

class Class{

    final int z = 1;

    void methodA(int x) {
        x = z;
    }

    void methodB(final int x) {
        x = z;
    }

    void methodC(final int x) {
        z = x;
    }
    
    void methodD(final Person person) {
        person.setFirstName("John");
    }

    void methodE(final Person person) {
        person = new Person("Mike", 12);
    }
}

Które z powyższych metod są poprawne?

Tylko methodA()methodD(). W każdym innym przypadku próbujemy nadpisać zmienną zdefiniowaną jako final.

Metoda z parametrem zadeklarowanym jako final { weekly #3 }

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Przewiń do góry