"Nevhodné blokovanie volania metód", keď jeden StringBuilder pripojí iného

0

Otázka

Prečo IntelliJ IDEA zobraziť upozornenie "Nevhodné blokovanie volania metód", keď jeden StringBuilder pridá iný?

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

Mám podozrenie, že je chyba v IntelliJ IDEA, ak niekto prichádza s rozumné vysvetlenie. Pozri https://youtrack.jetbrains.com/issue/IDEA-282947

2021-11-19 11:55:19
0

Myslím, že to je blokovanie tak snáď to je dôvod, prečo intelliJ sa sťažovať. Pretože si vytvárajú Mono na konci metóda všetko, čo je pred ktoré je vykonané pred alebo mimo Mono toku. Ho porazí účelom jalového prúdu. Ak som dal Mono v hornej potom bez varovania:

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();
            });
}

V tomto prípade len o vytvorení prvého StringBuilder je vykonaný mimo Mono toku.

Tiež nezabúdajte, myslím, že intelliJ si môže myslieť, že sb1.append(sb2) volá Objekt::toString (), ktorá môže byť aj na blokovanie, ak je cache názov triedy v VM keďže sb1.append(sb2.toString()) sa nazýva StringBuilder::toString (), ktorý nemusí robiť žiadne blokovanie.

2021-11-19 13:17:47

V iných jazykoch

Táto stránka je v iných jazykoch

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