Size: a a a

Kotlin Community

2020 June 29

I

Ilmir in Kotlin Community
Arkadii Ivanov
В исходном вопросе нет значения,  есть только тип 🤔
Так тут как раз по типу и выбирается функция. Значения и там и там не нул.
источник

AI

Arkadii Ivanov in Kotlin Community
Ilmir
Так тут как раз по типу и выбирается функция. Значения и там и там не нул.
Выборка по типу значения. А там надо просто по типу. Сигнатура должна быть без значения
источник

AI

Arkadii Ivanov in Kotlin Community
Т.е. вызов должен быть foo<String?>() ли foo<String>() или
inline fun <reified T> bar() {
   if (foo<T>()) ... else ...
}
источник

VP

Vladimir Petrakovich in Kotlin Community
Ilmir
Можно объявить ещё одну функцию, которая будет принимать нулябельный тип:
inline fun <reified T : Any> foo1(t: T) {
   println("reified T : Any: $t")
}

@JvmName("-foo1")
inline fun <reified T> foo1(t: T) {
   println("reified T: $t")
}

fun test1(a: Any?) {
   foo1(a)
}

fun test2(a: Any) {
   foo1(a)
}

fun main() {
   test1("nullable")
   test2("non-nullable")
}
Мне кажется, или вместо нормального типа там будет Any?
источник

AI

Arkadii Ivanov in Kotlin Community
Может как то так? Не пробовал конечно такое:
inline fun <reified T> isNullable(): Boolean {
   return typeOf<T>().isMarkedNullable
}
источник

I

Ilmir in Kotlin Community
Vladimir Petrakovich
Мне кажется, или вместо нормального типа там будет Any?
Да, в примере будет Any?
источник

VP

Vladimir Petrakovich in Kotlin Community
Arkadii Ivanov
Может как то так? Не пробовал конечно такое:
inline fun <reified T> isNullable(): Boolean {
   return typeOf<T>().isMarkedNullable
}
Должно работать, как и null is T. Но как потом вызвать функцию, принимающую T как не-nullable?
источник

AI

Arkadii Ivanov in Kotlin Community
источник

AI

Arkadii Ivanov in Kotlin Community
Вроде работает даже)
источник

I

Ilmir in Kotlin Community
Vladimir Petrakovich
Должно работать, как и null is T. Но как потом вызвать функцию, принимающую T как не-nullable?
За`@Suppress`ить ошибку если только.
источник

AI

Arkadii Ivanov in Kotlin Community
Ilmir
За`@Suppress`ить ошибку если только.
Ну да)
источник

VP

Vladimir Petrakovich in Kotlin Community
Ilmir
За`@Suppress`ить ошибку если только.
Ну такое)
Такое кунг-фу лучше применять только при крайней необходимости. Или если ты из команды котлина 😄
источник

AI

Arkadii Ivanov in Kotlin Community
Vladimir Petrakovich
Ну такое)
Такое кунг-фу лучше применять только при крайней необходимости. Или если ты из команды котлина 😄
Ну хз, добрая часть корутин и каналы экспериментальные, а все их в прод тянут. А тут typeOf какой-то.
источник

VP

Vladimir Petrakovich in Kotlin Community
Arkadii Ivanov
Ну хз, добрая часть корутин и каналы экспериментальные, а все их в прод тянут. А тут typeOf какой-то.
Так я не про typeOf, а про @Suppress для ошибок
источник

AI

Arkadii Ivanov in Kotlin Community
Vladimir Petrakovich
Так я не про typeOf, а про @Suppress для ошибок
Так а как иначе? Метод помечен как эксперимент
источник

T

Timur in Kotlin Community
Arkadii Ivanov
Так а как иначе? Метод помечен как эксперимент
источник

AI

Arkadii Ivanov in Kotlin Community
А ну да) то же самое в общем то
источник

VP

Vladimir Petrakovich in Kotlin Community
Arkadii Ivanov
А ну да) то же самое в общем то
Ну так-то нет. Но в любом случае @Suppress-ить Ильмир предложил не использование typeOf, речь вообще не о нём была.
источник

AI

Arkadii Ivanov in Kotlin Community
Vladimir Petrakovich
Ну так-то нет. Но в любом случае @Suppress-ить Ильмир предложил не использование typeOf, речь вообще не о нём была.
Ой точно, простите тогда
источник

E

Edgar Khimich in Kotlin Community
всем привет
помогите разобраться как мокать функцию с колбеком

fun register(uuid: String, email: String, completion: (Result<SignUpResponse, RestError>) -> Unit) {
       val data = SignUpData(email.trim(), uuid)
       val response = restClient.user().signUp(data)
       when (response) {
           is RestResponse.Success<SignUpResponse> -> completion(Result.Success(response.value))
           is RestResponse.Error -> completion(Result.Error(response.error))
       }

Эту функцию я вызываю во viewmodel
Хочу написать тест на viewModel function

signUpManager.register(mobileInfoHelper.getUuid(), email) {
               result.value = when (it) {
                   is Result.Success<SignUpResponse, *> -> Response.SignUpSuccess
                   is Result.Error -> Response.SignUpError(it.error.message)
               }


mobileInfoHelper.getUuid() я замокал, а вот что делать с колбеком я не понимаю
хочу протестировать Result.Success

Заранее спасибо
источник