Mam właściwość zerowalną (obiekt Java), która wie, jak konwertować się na ciąg znaków, a jeśli ta reprezentacja nie jest pusta, chciałabym zrób coś z tym. W Javie to wygląda:Idiom Kotlina do pracy z obiektem niezerowym i niepustą Reprezentacja ciągów znaków
MyObject obj = ...
if (obj != null) {
String representation = obj.toString();
if (!StringUtils.isBlank(representation)) {
doSomethingWith(representation);
}
}
Próbuję znaleźć najbardziej idiomatyczne sposób konwertowania to Kotlin i mam:
with(obj?.toString()) {
if (!isNullOrBlank()) {
doSomethingWith(representation)
}
}
Ale to nadal czuje się zbyt dużo pracy dla takiego prosta operacja. Mam przeczucie, że łącząc to, mogę nieco to skrócić.
Kroki są:
- Jeśli obiekt (A) nie jest null
- Jeśli reprezentacja String (B) przedmiotu (A) nie jest puste
- coś z (B)
próbowałem:
when(where?.toString()) {
isNullOrBlank() -> builder.append(this)
}
Ale (1) nie jest on z:
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: @InlineOnly public inline fun
CharSequence?.isNullOrBlank(): Boolean defined in kotlin.text @InlineOnly public inline fun CharSequence?.isNullOrBlank(): Boolean defined in
kotlin.text
A nawet jeśli to ma przeszłość, (2) że to chcesz wyczerpujący else
, które nie troszczą się dołączyć.
Co to jest "droga Kotlina"?
dobra odpowiedź, ale myślę, że po włączeniu testu IF-tu. Chce wywołać 'doSomethingWith', jeśli reprezentacja łańcuchów ma wartość _not_ null. – marstran
Ach ok, odwróci moją odpowiedź :-) dzięki –
@marstran Prawidłowo - chcę tylko _do rzeczy, jeśli mam dobrą reprezentację String. (Dobro jest niezerowe i niepuste.) –