"Inadecuado método de bloqueo de llamadas" cuando uno StringBuilder anexa otro

0

Pregunta

¿Por qué IntelliJ IDEA de mostrar el aviso de "Inadecuado método de bloqueo de llamadas" cuando uno StringBuilder añade otro?

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

Sospecho que es un error en IntelliJ IDEA, a menos que alguien venga con una explicación razonable. Ver https://youtrack.jetbrains.com/issue/IDEA-282947

2021-11-19 11:55:19
0

Creo que está bloqueando así que tal vez es por eso que intelliJ es quejarse. Ya que se está creando el Mono al final del método todo lo que viene antes de que se ejecuta antes o fuera de el Mono de flujo. Se frustra el propósito de un reactivo de flujo. Si me pongo el Mono en la parte superior, a continuación, ninguna advertencia:

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

En este caso, sólo la creación de la primera StringBuilder se ejecuta fuera de la Mono de flujo.

También, la mente, creo intelliJ puede pensar que sb1.append(sb2) es Objeto de llamada::toString (), que bien puede ser el bloqueo cuando se almacena en caché el nombre de la clase en la VM, mientras que sb1.append(sb2.toString()) se llama StringBuilder::toString() que no puede hacer ningún bloqueo.

2021-11-19 13:17:47

En otros idiomas

Esta página está en otros idiomas

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