"Inappropriato di blocco chiamata al metodo" quando uno StringBuilder aggiunge un altro

0

Domanda

Perché IntelliJ IDEA di mostrare l'avviso "Inappropriato di blocco chiamata al metodo" quando uno StringBuilder aggiunge un altro?

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

Ho il sospetto che sia un bug di IntelliJ IDEA, a meno che qualcuno arriva con una ragionevole spiegazione. Vedere https://youtrack.jetbrains.com/issue/IDEA-282947

2021-11-19 11:55:19
0

Penso che sta bloccando così, forse, che è il motivo per intelliJ è lamentarsi. Dal momento che si sta creando il Mono alla fine del metodo tutto ciò che viene prima, che viene eseguito prima o al di fuori del Mono flusso. Sconfigge lo scopo di un reattivo di flusso. Se ho messo il Mono in alto, quindi nessun avviso:

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

Solo In questo caso, la creazione del primo StringBuilder è eseguito al di fuori del Mono flusso.

Inoltre, la mente, penso intelliJ può pensare che sb1.append(sb2) è Oggetto chiamante::toString() che potrebbe benissimo essere il blocco quando la cache il nome della classe VM, mentre sb1.append(sb2.toString()) si chiama StringBuilder::toString() che non può fare qualsiasi blocco.

2021-11-19 13:17:47

In altre lingue

Questa pagina è in altre lingue

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