"Impróprio bloqueio de chamada de método" quando um StringBuilder acrescenta outro

0

Pergunta

Por que o IntelliJ IDEA mostrar o aviso de "Impróprio bloqueio de chamada de método" quando um StringBuilder acrescenta outro?

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

Eu suspeito que é um bug no IntelliJ IDEA, a menos que alguém vem com uma explicação razoável. Ver https://youtrack.jetbrains.com/issue/IDEA-282947

2021-11-19 11:55:19
0

Eu acho que ele está bloqueando assim talvez seja por isso que o intelliJ está reclamando. Como você está criando o Mono no final do método de tudo o que vem antes, que é executado antes ou fora do Mono fluxo. Ele derrota o propósito de um fluxo de reativos. Se eu colocar o Mono no topo, em seguida, sem aviso:

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

Neste caso, apenas a criação do primeiro StringBuilder é executada fora do Mono fluxo.

Também, você mente, eu acho que o intelliJ pode pensar que sb1.append(sb2) é chamada Objeto::toString() que pode muito bem ser de bloqueio quando for o cache o nome da classe na VM considerando que sb1.append(sb2.toString()) é chamado de StringBuilder::toString (), que não pode fazer nenhum bloqueio.

2021-11-19 13:17:47

Em outros idiomas

Esta página está em outros idiomas

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