lombok i zmienne final

0

Witam, tworząc konstruktor za pomocą lomboka napotkałem na problem w którym moje IDE podkreśla mi zmienną (ta linijka ze strzałką) ponieważ nie została ona zainicjalizowana.
Jest to fragment filmu instruktażowego z youtube według którego postępuje. Jeśli usunę pole "final" to IDE przestaje wyświetlać komunikat o błędzie. Próbowałem znaleźć rozwiązanie na własną rękę i dowiedziałem się, że lombok nie uwzględni w konstruktorze zmiennych finalnych w których wartość została już określona. W tym wypadku nie przypisuje do zmiennej żadnej wartości, a mimo to zmienna nie zostaje uwzględniona w konstruktorze.

import lombok.AllArgsConstructor;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

@Service
@AllArgsConstructor
public class AppUserService implements UserDetailsService {

    private final AppUserRepository appUserRepository; <-----------------------------------------

    @Override
    public UserDetails loadUserByUsername(String s)
            throws UsernameNotFoundException {
        return null;
    }
}

Proszę o jakieś wskazówki
Pozdrawiam

1

Co mówi build tool, którym budujesz aplikację (np. maven, gradle)?

Masz skonfigurowane wszystkie wymagane zależności do Lomboka w projekcie?

Jeśli chodzi o IntelliJ - zainstalowałeś Lombok Plugin? Bez pluginu IDE może nie wiedzieć, że Lombok wygeneruje konstruktor z wymaganym parametrem i krzyczy, choć niekoniecznie powinno.

A jak już jesteśmy przy wymaganym parametrze i Lomboku, możesz rozważyć użycie @RequiredArgsConstructor (generuje konstruktor dla wymaganych parametrów, zamiast potencjalnie całego naręcza konstruktorów) lub innego języka - taki Kotlin nie potrzebuje Lomboka, wystarczy że zdeklarujesz sobie konstruktor i Spring ogarnie wstrzykiwanie bez adnotacji @Autowired:

@Service
class FooService(private val barComponent: BarComponent): BazService {
  override fun doSomething(something: Something): SomeReturnType {
    // ....
  }
}
3
  1. Nie masz pluginu do lomboka w IDE
  2. Czemu nie zrobisz jak człowiek i nie napiszesz konstruktora? Nawet nie musisz pisać. Wystarczy nacisnąc skrót klawiszowy i sie samo zrobi.
0

Dzięki za pomoc, wszystko jest już jasne. Temat do zamknięcia.

2

Czyli javowe record od javy 15, które tak naprawdę robi to wszystko, jest według Ciebie złe? ;p

Javove recordy po pierwsze primo są częścią języka. Nie wymagają wtyczek do IDE, nie wymagają zależności w mavenie. Normalna część języka. A po drugie secundo, to nie wymagają użycia znaczku którego zaczynam ostatnio coraz mniej znosić Tak - dobrze zgadłeś że chodzi o '@'.

8

Jestem wielkim miłośnikiem lomboka. Nie ma co Lomboka porównywać nawet z recordami.
Nawet w porównaniu z podobnymi alternatywami typu Immutables czy AutoValue lombok jest popieprzony. A to przez to, że w locie (buildzie) podmienia klasy, a nie generuje w dodatkowym folderze (np w: - /build/generated/sources/) - jak inne narzędzia.

Przez to zlomboczony kod jest totalnie niekompatybilny z javą, co raz na jakiś czas (zmiana JVM, IDE, CI) powoduje niezły ból głowy w takich projektach.

Anyway: użycie Lomboka świadczy o jednym - wiesz już, że Java nie nadaje się do Twojego projektu, ale nie masz jaj, żeby się do tego przyznać.
Więc uczysz się tego dziwacznego jezyka, o składni przypominającej kupę - udając przed wszystkimi (i przed sobą), że to nadal jest java. Nie, nie jest.

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