"Nevhodné blokování volání metody", kdy jeden StringBuilder připojí další

0

Otázka

Proč IntelliJ IDEA ukázat upozornění "Nevhodné blokování volání metody", kdy jeden StringBuilder přidá další?

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 podezření, že to je chyba v IntelliJ IDEA, pokud někdo přijde s rozumným vysvětlením. Vidět https://youtrack.jetbrains.com/issue/IDEA-282947

2021-11-19 11:55:19
0

Myslím, že je blokují, takže možná to je důvod, proč intelliJ je si stěžovat. Protože vytváříte Mono na konci metody, vše, co přichází, než že je proveden před nebo mimo Mono toku. To maří účel reaktivní tok. Když jsem dal Mono na vrcholu pak bez varování:

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 případě pouze vytvoření první StringBuilder je proveden mimo Mono toku.

Také, myslím, intelliJ může myslet, že sb1.append(sb2) volá Objekt::toString (), která může být blokování, kdy je ukládání do mezipaměti název třídy do VM, vzhledem k tomu, že sb1.append(sb2.toString()) se nazývá StringBuilder::toString (), které nemusí dělat žádné blokování.

2021-11-19 13:17:47

V jiných jazycích

Tato stránka je v jiných jazycích

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