Covariance in Kotlin

Implementation of using Covariance (now you can define functions like “someFunWithMagicRoom” thanks to “out T: Room”):

package org.myorg.generic

fun main(args: Array<String>) {
    val ordinaryGame = OrdinaryMazeGame()
    val magicGame = MagicMazeGame()

abstract class Room {
    fun connect(room: Room) {

class MagicRoom : Room()

class OrdinaryRoom : Room()

class MagicMazeGame : MazeGame<MagicRoom>() {
    override fun makeRoom(): MagicRoom = MagicRoom()

class OrdinaryMazeGame : MazeGame<OrdinaryRoom>() {
    override fun makeRoom(): OrdinaryRoom = OrdinaryRoom()

fun someFunWithMagicRoom(m: MazeGame<MagicRoom>) {

fun someFunWithRoom(m: MazeGame<Room>) {

abstract class MazeGame<out T: Room> {
    private val rooms = mutableListOf<T>()

    init {
        val room1 = makeRoom()
        val room2 = makeRoom()

    protected abstract fun makeRoom(): T


Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de

Estás comentando usando tu cuenta de Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: