Size: a a a

Kotlin Community

2019 December 31

BP

Bogdan Panchenko in Kotlin Community
Alex
Подскажите, пожалуйста, по вопросу с екстеншин функциями.
Есть у меня кастомный интерфейс StringProcessor с методом process(String): String и куча его имплементаций.
Суть в том, что он берет строку модифицирует ее и возвращает новую.
Хотел написать удобный метод которым можно было бы применить к строке сразу коллекцию из таких обработчиков.
Никак не пойму, как теперь вызвать метод process из дженерика?
fun <T : StringProcessor> ....
источник

BP

Bogdan Panchenko in Kotlin Community
Bogdan Panchenko
fun <T : StringProcessor> ....
а стоп, у тебя же обычный fun type. Выше сказали
источник

A

Alex in Kotlin Community
Quantum Harmonizer
Экстеншен. Но вопрос не про них.
Вместо call можно просто скобки, а можно invoke.
все верно, спасибо большое!
источник

QH

Quantum Harmonizer in Kotlin Community
да, StringProcessor чёт пропал)
источник

BP

Bogdan Panchenko in Kotlin Community
Alex
Подскажите, пожалуйста, по вопросу с екстеншин функциями.
Есть у меня кастомный интерфейс StringProcessor с методом process(String): String и куча его имплементаций.
Суть в том, что он берет строку модифицирует ее и возвращает новую.
Хотел написать удобный метод которым можно было бы применить к строке сразу коллекцию из таких обработчиков.
Никак не пойму, как теперь вызвать метод process из дженерика?
а вообще это на fold смахивает
источник

A

Alex in Kotlin Community
хотя, к списку применить не получается так просто, может метод в интерфейсе надо пометить как-то?
источник

BP

Bogdan Panchenko in Kotlin Community
Bogdan Panchenko
fun <T : StringProcessor> ....
^
источник

BP

Bogdan Panchenko in Kotlin Community
StringProcessor покажи
источник

BP

Bogdan Panchenko in Kotlin Community
fun <T : StringProcessor> Iterable<T>.applyAsPipline(str: String): String { ... }   @alex_sensei корей тебе нужно вот это
источник

A

Alex in Kotlin Community
Верно, но хотелось именно с дженериками попробовать.
источник

BP

Bogdan Panchenko in Kotlin Community
Alex
Верно, но хотелось именно с дженериками попробовать.
Так это с дженериком
источник

BP

Bogdan Panchenko in Kotlin Community
Bogdan Panchenko
fun <T : StringProcessor> Iterable<T>.applyAsPipline(str: String): String { ... }   @alex_sensei корей тебе нужно вот это
Это говорит что любой Iterable, который содержит StringProcessor может вызвать этот метод, при этом ты не говоришь про конкретную реализацию
источник

BP

Bogdan Panchenko in Kotlin Community
Alex
Верно, но хотелось именно с дженериками попробовать.
ну и по факту вот твоя функция https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/fold.html
источник

I

Ilmir in Kotlin Community
Alexander Nozik
нет, Nothing - универсальный подтип. Вообще какой тип у null - это хороший вопрос
"Nothing?". И он автоматически приводится к нужному типу.
источник

AN

Alexander Nozik in Kotlin Community
Ilmir
"Nothing?". И он автоматически приводится к нужному типу.
Ну все к этому и пришли :)
источник

AO

Alexey Otts in Kotlin Community
Vladimir Petrakovich
Нет, не забыл, он вывелся сам.
Nothing? - это самый точный тип для null, а в Any? можно что угодно запихать.
null - это же просто отдельный тип в иерархии, который является подтипом всех Any?
источник

AO

Alexey Otts in Kotlin Community
Ну ок раз все пришли с Nothing?
источник

AN

Alexander Nozik in Kotlin Community
Alexey Otts
null - это же просто отдельный тип в иерархии, который является подтипом всех Any?
Ну он ведет себя как Nothing? за исключением того, что ему можно явно что-то присваивать.
источник

AN

Alexander Nozik in Kotlin Community
Вот у меня вопрос по контрактам. Есть составное имя из нескольких сегментов. При этом метод first() возвращает null если имя пустое. Я могу сделать такой метод, например ensureNotEmpty, после которого first всегда будет возвращать не null?
источник

BP

Bogdan Panchenko in Kotlin Community
Alexander Nozik
Ну он ведет себя как Nothing? за исключением того, что ему можно явно что-то присваивать.
Присвоить переменной типа Nothing?, Ну null ему можно засунуть
источник