Tworzenie obiektu wewnątrz lambdy

0

Chciałbym korzystając z vavra obsłużyć wyjątki no i mam pewien problem.
Mam klasę która nasłuchuje na przychodzące połączenia i tworzy obiekty klasy ClientWorker (jako parametr przyjmuje Socket), która te połączenia obsłuży.

   private void acceptConnections() {
        ClientWorker clientWorker;
        Try.of(() -> clientWorker = ClientWorker.create(serverSocket.accept()));
        workers.add(clientWorker);
    }

No i w taki sposób dostaję błąd, że "Variable inside lambda must be final or...". Tak więc dodaję wspominany final,

 final ClientWorker clientWorker;

no i dostaję, że "Cannot assign value to final variable".

W jaki sposób mogę to obejść? Poza oczywistym, użyciem javowego try-catcha zamiast "vavrowego".

1

Cóz, dużo łatwiej okazało się rzucić wyjątek poziom wyżej, i zrobić ```
Try.run(()->acceptIncomingConnections());


pytanie pozostaje czy to jedyna opcja w takim wypadku? Czy mogłem jakoś zrobić wszystko wewnątrz tej metody?
0
Mistrzowski Kura napisał(a):
   private void acceptConnections() {
        ClientWorker clientWorker;
        Try.of(() -> clientWorker = ClientWorker.create(serverSocket.accept()));
        workers.add(clientWorker);
    }

Masz jakiś koncepcyjny WTF. Główny sens VAVRa jest taki, żeby metody zwracały wartośći oraz, żeby unikać mutowania pojemników (listy itp.) oraz zmiennych
U Ciebie, nie dość że mutujesz (clientWorker, workers), to jeszcze metoda bezwstydnie zwraca void.

Nie wiadomo po co masz tego VAVRa, ale przy takim kodzie, tylko Ci przeszkadza.

EDIT:
Taki Try.of nie podstawiony do wyniku to jest piękny WTF. Dokładny odpowiednik catch (e: Exception) { /* :-) happy debugging, suckers */ } .

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