"Inappropriée de blocage d'appel de la méthode" lorsque l'on ajoute une autre StringBuilder

0

La question

Pourquoi ne IntelliJ IDEA afficher l'avertissement "Inapproprié de blocage d'appel de la méthode" lorsque l'on StringBuilder ajoute une autre?

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

Je soupçonne que c'est un bug dans IntelliJ IDEA, sauf si quelqu'un vient avec une explication raisonnable. Voir https://youtrack.jetbrains.com/issue/IDEA-282947

2021-11-19 11:55:19
0

Je pense que c'est le blocage, donc c'est peut-être pourquoi l'ide est de se plaindre. Depuis la création de la Mono à la fin de la méthode de tout ce qui vient avant qui est exécutée avant ou à l'extérieur de la Mono flux. Il défait le but d'un réactif de flux. Si j'ai mis le Mono en haut, puis pas d'avertissement:

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

Dans ce cas, seule la création de la première StringBuilder est exécuté en dehors de la Mono flux.

Aussi, vous l'esprit, je pense que l'ide peut penser que sb1.append(sb2) est l'appel de l'Objet::toString() qui pourrait bien être le blocage lorsqu'elle est mise en cache le nom de la classe dans la machine virtuelle alors que sb1.append(sb2.toString()) est appelé StringBuilder::toString() qui ne peut pas faire tout blocage.

2021-11-19 13:17:47

Dans d'autres langues

Cette page est dans d'autres langues

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