Używanie final dla argumentów i pól klas

0

Cześć.

Zrozumiałym jest używanie final przy lokalnych zmiennych jakiś metod.
Zrozumiałym jest używanie final w jakiś strukturach danych.

A patrząc pragmatycznie - co nam daje używanie final w argumentach metod oraz klasach serwisowych, gdzie zależności to jakieś repozytoria, serwisy czy inne komponenty?
Bo w tych przypadkach raczej nikt normalny nie przypisuje nic innego do jakiegoś pola z referencją do np. serwisu czy tam do argumentu metody.
Czy zyskujemy tu jakąś wydajność? Jakieś optymalizacje dla GC?

1

Co do final dla zależności serwisowych - to jest niby oczywiste, że raz się ustawia i koniec, ale może ktoś, z różnych powodów (np circular dependency błąd dostał) dorobi sobie settera, to mając pole final, dostanie na twarz błąd kompilacji i się ogarnie, że nie powinien tak robić.

Co do ustawiania final argumentów metody - jest mały use case w przypadku lambd, które wymagają użycia jedynie final zmiennych - see https://stackoverflow.com/questions/4162531/making-java-method-arguments-as-final

1
Pinek napisał(a):

Co do final dla zależności serwisowych - to jest niby oczywiste, że raz się ustawia i koniec, ale może ktoś, z różnych powodów (np circular dependency błąd dostał) dorobi sobie settera, to mając pole final, dostanie na twarz błąd kompilacji i się ogarnie, że nie powinien tak robić.

Tu się zgadzam

Co do ustawiania final argumentów metody - jest mały use case w przypadku lambd, które wymagają użycia jedynie final zmiennych - see https://stackoverflow.com/questions/4162531/making-java-method-arguments-as-final

A tu mylisz lambdę z klasą anonimową. Dla lambd dzieje się to automagicznie i nazywa się to efektywny final. Co tylko udowadnia że te 25 lat temu skopali składnię (final poinien być domyślny jak w Ruscie) i teraz nie da się tego odkręcić.

Można też napisać:

 void m(int param) {
        final param1 = param;
        new Thread(new Runnable() {
            public void run() {
                System.err.println(param1);
            }
        }).start();
    }

Co w starym kodzie (sprzed Javy 8) się zdarzało

1 użytkowników online, w tym zalogowanych: 0, gości: 1