运算符as和ClassCastException

我怎样才能通过运营商“打破Kotlin继承”。 例如 在这里输入图像描述

我可以在运行时得到ClassCastException,同时它应该被正确编译

(Animal) -> Unit(Cat) -> Unit类型都由相同的类Function1<P1, R> 。 将其中一个转换为另一个不会导致ClassCastException因为它们在运行时是相同的。

我使用了不安全的转换(运算符)。 有一个很好的例子: java.lang.Integer不能转换为Kotlin中的java.lang.Long(当初始值为null时)

 package task open class Animal { } class Cat : Animal() { } fun main(args: Array<String>) { var compare1: (Animal) -> Unit = {x: Animal -> println("Animal")} var compare2: (Cat) -> Unit = {x: Cat -> println("Cat")} var animal = Animal() var cat = Cat() compare1(animal) compare2(cat) val compare3 = compare2 as (Animal) -> Unit //ClassCastException will be thrown compare3(animal) }