Size: a a a

Kotlin Community

2021 January 05

BV

Boris Vanin in Kotlin Community
Vladimir Petrakovich
Сомневаюсь, что кастовать один функциональный тип к другому - это хорошая затея. Но странно, что это не помогает.
так а какой синтаксис, чтобы указать, какого типа функциональный тип?
источник

VP

Vladimir Petrakovich in Kotlin Community
Boris Vanin
так а какой синтаксис, чтобы указать, какого типа функциональный тип?
У лямбды тип не указать, остаются только анонимные функции 🤷‍♂️
источник

VP

Vladimir Petrakovich in Kotlin Community
Ну или в переменную с известным типом
источник

BV

Boris Vanin in Kotlin Community
ну вот да, только чем плох каст?
источник

BV

Boris Vanin in Kotlin Community
в качестве указания типа
источник

VP

Vladimir Petrakovich in Kotlin Community
Boris Vanin
ну вот да, только чем плох каст?
Тем, что он unchecked например
источник

BV

Boris Vanin in Kotlin Community
синтетический пример работает
источник

BV

Boris Vanin in Kotlin Community
в реальном проекте нет
источник

VP

Vladimir Petrakovich in Kotlin Community
Boris Vanin
в качестве указания типа
Главная проблема в том, что каст не указывает тип, а меняет его у существующего значения другого типа
источник

BV

Boris Vanin in Kotlin Community
Vladimir Petrakovich
Главная проблема в том, что каст не указывает тип, а меняет его у существующего значения другого типа
это я понимаю, я о том, почему каст не подсказывает компилятору тип
источник

BV

Boris Vanin in Kotlin Community
вроде именно так работает в каком-ньть груви
источник

VP

Vladimir Petrakovich in Kotlin Community
Boris Vanin
это я понимаю, я о том, почему каст не подсказывает компилятору тип
Вопрос хороший, но на практике разницы нет, потому что так всё равно писать не надо
источник

BV

Boris Vanin in Kotlin Community
ведь {} может быть интерпретировано очень по-разному
источник

VP

Vladimir Petrakovich in Kotlin Community
Boris Vanin
вроде именно так работает в каком-ньть груви
А там динамика, замыкание в рантайме может принять что угодно (да и вернуть тоже)
источник

BV

Boris Vanin in Kotlin Community
чот не смог быстро воспроизвести проблему
источник

BV

Boris Vanin in Kotlin Community
import JavaB

class A {
   fun test(test: JavaB) {
       println("original")
   }
}

fun A.test(test: JavaB.Builder.() -> Unit) {
   println("extension")
}

fun main() {
   val a = A()

   a.test {
       ""
   }

   a.test(fun JavaB.Builder.() {

   })

   a.test({ _: JavaB.Builder -> } as JavaB.Builder.() -> Unit)

}
источник

BV

Boris Vanin in Kotlin Community
ни один из этих методов не резолвится в вызов оригинального метода
источник

VP

Vladimir Petrakovich in Kotlin Community
Boris Vanin
import JavaB

class A {
   fun test(test: JavaB) {
       println("original")
   }
}

fun A.test(test: JavaB.Builder.() -> Unit) {
   println("extension")
}

fun main() {
   val a = A()

   a.test {
       ""
   }

   a.test(fun JavaB.Builder.() {

   })

   a.test({ _: JavaB.Builder -> } as JavaB.Builder.() -> Unit)

}
Так он не функцию принимает же
источник

BV

Boris Vanin in Kotlin Community
Vladimir Petrakovich
Так он не функцию принимает же
функциональный тип
источник

BV

Boris Vanin in Kotlin Community
джава класс с одним методом
источник