Wywołanie metod javovych z Kotlina - NotNull by default

0

Siemka, mam taki przykładowy kod:

override fun getAccountUserDetails(username: Username): Option<AccountDetails> {
        return Try.of { jdbcTemplate.queryForObject(QUERY, AccountRowMapper, arrayOf(username.value)) }
                .onFailure { LOGGER.error(" get AccountUserDetails {}", it) }
                .map { it!! }
                .toOption()!!
    }

WIem że jdbcTemplate wywali IncorrectResultSizeDataAccessException jeśli nie będzie rezultatu, więc pakuje to w Try z logowaniem a później zamieniam Try w Option.
Jak zrobić żeby nie musiec wołac "!!" skoro wiem że to nie będzie null? Szczególnie to chciałbym się tego map pozbyć
@jarekr000000 @danek pomocy :D

PS Używam gradla jakby co :D

1

Dziwne.
!! z map możesz przesunąć za query - od razu in the unlikely event, że będzie null złapiesz i zalogujesz faila.
Czemu toOption() potrzebuje !! to nie wiem.
Jeśli naprawde to robi to dorób swoją extension fun do Try i załatwione.

Generalnie skoro cała metoda to jedno wyrażenie to po co pisać return fun () .. = jest super.

0

No faktycznie:

override fun getAccountUserDetails(username: Username): Option<AccountDetails> =
                Try.of{ jdbcTemplate.queryForObject(QUERY, AccountRowMapper, arrayOf(username.value))!! }
                .onFailure { LOGGER.error(" get AccountUserDetails exception {}", it) }
                .toOption()

Z tym toOption()!! to wcześniej się ogarnąłem, ale nie wiem czemu nie zorientowałem sie że że "!!" powinno dać się za query. W każdym razie da się jakoś to inaczej ogarniąc niż przez nawalanie "!!"? Chyba nie bardzo :D

2

Tu zgaduje, bo nie mam czasu przejrzeć:
@Nullable
na metodzie queryForObject przekłada się na to, że dostajesz w kotlinie T? (może być null i będę Cię pilnował) zamiast typowego we współpracy z javą T! (czyli może być null, ale to twój problem).

Pretensje mamy do twórców frameworka z jdbcTemplate (choć też oni już dawno temu w SpringData zaczęli sensownie używać optionali).

Potencjalnie można zrobić własną metodę jeśli będziesz miał tego dużo. Ale na 90% nie warto.

1 użytkowników online, w tym zalogowanych: 0, gości: 1