"Nieodpowiedni wywołanie metody blokady", gdy jeden StringBuilder dodaje inny

0

Pytanie

Dlaczego IntelliJ IDEA pokazuje komunikat "Niewłaściwy wywołanie metody blokady", gdy jeden StringBuilder dodaje jeszcze jeden?

public Mono<String> doSomethingReactive() {
    final StringBuilder sb1 = new StringBuilder("hello");
    final StringBuilder sb2 = new StringBuilder("world");
    sb1.append(sb2); // This append() causes warning "Inappropriate blocking method call"
    sb1.append(sb2.toString()); // ... but this append() is OK :)
    return Mono.just(sb1.toString());
}
2
0

Podejrzewam, że to błąd w IntelliJ IDEA, jeśli tylko ktoś nie da rozsądnego wyjaśnienia. Widzisz https://youtrack.jetbrains.com/issue/IDEA-282947

2021-11-19 11:55:19
0

Myślę, że to blokuje, więc może dlatego IntelliJ narzeka. Ponieważ tworzysz Mono w końcu metody, wszystko, co poprzedza ten, jest wykonywane przed lub poza przepływu Mono. To jest sprzeczne z celem strumienia przepływu. Jeśli ustawię Mono na górze, to żadnego ostrzeżenia:

public Mono<String> doSomethingReactive() {
    return Mono.just(new StringBuilder("hello"))
            .map(sb1 -> {
                StringBuilder sb2 = new StringBuilder("world");
                sb1.append(sb2);
                sb1.append(sb2.toString());
                return sb1.toString();
            });
}

W tym przypadku tylko tworzenie pierwszej StringBuilder wykonywane poza przepływu Mono.

Ponadto, należy pamiętać, myślę, że IntelliJ może pomyśleć, że sb1.append(sb2) powoduje Object::toString (), która może być blokowane w przypadku buforowania nazwy klasy w maszynie wirtualnej, więc jak sb1.append(sb2.toString()) wywoływana jest StringBuilder::toString (), która nie może wykonywać żadnych blokad.

2021-11-19 13:17:47

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................