Bir StringBuilder diğerini eklediğinde "Uygunsuz engelleme yöntemi çağrısı"

0

Soru

IntelliJ IDEA neden "Uygunsuz engelleme yöntemi çağrısı" uyarısını gösteriyor StringBuilder bir tane daha ekler mi?

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

Birisi makul bir açıklama getirmedikçe, IntelliJ Idea'da bir hata olduğundan şüpheleniyorum. Bakın https://youtrack.jetbrains.com/issue/IDEA-282947

2021-11-19 11:55:19
0

Bence engelliyor, belki de Intellij'in şikayet etmesinin nedeni budur. Yöntemin sonunda Mono oluşturduğunuzdan, bundan önce gelen her şey Mono akıştan önce veya dışında yürütülür. Reaktif bir akışın amacını yener. Mono'yu en üste koyarsam, uyarı yok:

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

Bu durumda, yalnızca ilk Stringbuilder'ın oluşturulması Mono akışın dışında yürütülür.

Ayrıca, aklınızda bulunsun, bence IntelliJ bunu düşünebilir. sb1.append(sb2) Object::toString() çağırıyor, bu da sanal makinedeki sınıf adını önbelleğe alırken engelliyor olabilir sb1.append(sb2.toString()) herhangi bir engelleme yapamayan StringBuilder::toString () olarak adlandırılır.

2021-11-19 13:17:47

Diğer dillerde

Bu sayfa diğer dillerde

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