Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Java - ArrayList - Stream - Jak vložit kód do try-catch

To nie že NetBeans nepočíta s null, ale ten program nepočíta s null. Ak "field.get(this)" vráti null, tak sa potom volá "null.toString()", ktoré spadne. "Objects.toString" počíta aj s prípadom, že hodnota je null, pričom ako druhý parameter môžeš nastaviť predvolenú hodnotu, ktorá sa použije v prípade null.

Áno, pre odstránenie null hodnôt je vhodné použiť filter. Ale keďže nechceš odfiltrovať reťazce, ktoré obsahujú text "null", tak je lepšie to spraviť predtým, než z hodnoty toho poľa spravíš reťazec. Niečo typu: "fields.map(this::getFieldValue).filter(Objects::nonNull).map(Objects::toString)...", pričom "getFieldValue" v tomto prípade vráti priamo objekt z "field.get(this)" bez konverzie do reťazca.

Druhá možnosť by bola použiť "Objects.toString(field.get(this), null)" a následne filtrovať podľa hodnoty null. Ale tá prvá možnosť je vhodnejšia.

Pre otestovanie typu hodnoty môžeš použiť "instanceof" alebo metódu "isAssignableFrom". Pre tento prípad bude tiež lepšie, ak "getFieldValue" vráti priamo objekt bez konverzie do reťazca. Potom je už len na tebe, či budeš testovať na Integer, Long, Byte a pod.

Final som použil preto, pretože je dobrou praktikou nemeniť hodnoty premenných a final zabezpečí, že to tak naozaj aj bude. Keď vidím final, tak nemusím čítať celý kód medzi priradením hodnoty do takej premennej a riadkom, kde sa tá premenná používa, a môžem si byť istý, že tam je hodnota priradená pôvodne.

NumberFormatException by si mohol použiť, ak by si chcel overiť, že textová hodnota reprezentuje číslo. Ak máš v poli ale priamo číslo, tak to moc nepomôže.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny