Ну кастинг всё-таки не сказать, что рефлексия:) имхо, одно дело залазить в список полей класса и смену финальности/приватности и другое - делать as? :)
С точки зрения языковых фич — да, кастинг — просто и не страшно. С точки же зрения сокрытия реализации — один фиг это проверка на то, есть ли в объекте недокументированные возможности.
None of the following candidates is applicable because of receiver type mismatch: public inline fun <T : Closeable?, R> Statement.use(block: (Statement) -> Unit): Unit defined in kotlin.io ЧЯДНТ? Проблема где-то глубже, чем утверждает компилятор?
None of the following candidates is applicable because of receiver type mismatch: public inline fun <T : Closeable?, R> Statement.use(block: (Statement) -> Unit): Unit defined in kotlin.io ЧЯДНТ? Проблема где-то глубже, чем утверждает компилятор?
None of the following candidates is applicable because of receiver type mismatch: public inline fun <T : Closeable?, R> Statement.use(block: (Statement) -> Unit): Unit defined in kotlin.io ЧЯДНТ? Проблема где-то глубже, чем утверждает компилятор?
Нет, проблема ровно в том, что use из kotlin.io не для AutoCloseable