Advertisement
NLinker

Kotlin typing is unsound

May 5th, 2025
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 0.70 KB | Software | 0 0
  1. open class Animal
  2.  
  3. class Cat() : Animal() {
  4.     fun myaw() {
  5.         System.out.println("myaw!");
  6.     }
  7. }
  8.  
  9. class Dog() : Animal() {
  10.     fun gav() {
  11.         System.out.println("dog!");
  12.     }
  13. }
  14.  
  15. // Usage:
  16. //     val list = mutableListOf<Int>()
  17. //     list.addAnything("string")
  18. //     val fail = list[0]
  19. private fun <E> List <E>.addAnything(element: E) {
  20.     if (this is MutableList<E>) {
  21.         this.add(element)
  22.     }
  23. }
  24.  
  25. fun main() {
  26.     val cats = mutableListOf<Cat>(Cat(), Cat())
  27.     val upcast: List<Cat> = cats
  28.     val covariance: List<Animal> = upcast
  29.     val animals: MutableList<Animal> = covariance as MutableList
  30.     animals[0] = Dog()
  31.     for (cat in cats) {
  32.         cat.myaw()
  33.     }
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement