Нужно вернуть значение из лямбды. Т.к. Java в 2022 году недостаточно для этого продвинута, нужно использовать что-то вроде указателя.
Можно использовать массив из одного элемента:
String[] stringRef1 = new String[1];
((Runnable) () -> {
stringRef1[0] = "result";
}).run();
System.out.println(stringRef1[0]);
Но это кажется не очень красивым.
Можно написать специальный класс:
class ObjectReference<T> {
T value;
}
var stringRef2 = new ObjectReference<String>();
((Runnable) () -> {
stringRef2.value = "result";
}).run();
System.out.println(stringRef2.value);
Можно использовать какой-нибудь существующий класс вроде AtomicReference, но вообще-то он тут не совсем к месту, мне обычной ссылки за глаза хватит.
Есть ли где-нибудь в JDK уместный в данном случае класс, чтобы не писать свой?