@uncheckedVariance en Kotlin?

En su charla Los comstackdores son bases de datos , Martin Odersky presenta un interesante caso de esquina de varianza:

class Tree[-T] { def tpe: T @uncheckedVariance def withType(t: Type): Tree[Type] } 

T se define como contravariante, porque es útil pensar en un tree tipeado ( Tree[Type] ) como un subtipo de un tree sin tipo ( Tree[Nothing] ), pero no al revés.

Normalmente, el comstackdor de Scala se quejaría de que T aparezca como el tipo de tpe método tpe . Es por eso que Martin cierra el comstackdor con una @uncheckedVariance @uncheckedVariance.

Aquí está el ejemplo traducido a Kotlin:

 abstract class Tree<in T> { abstract fun tpe(): T abstract fun withType(t: Type): Tree<Type> } 

Como se esperaba, el comstackdor de Kotlin se queja de que T aparece en una position 'fuera'. ¿Kotlin tiene algo similar a @uncheckedVariance ? ¿O hay una mejor manera de resolver este problema en particular?

Kotlin tiene una anotación @UnsafeVariance que es equivalente a @uncheckedVariance en scala:

 abstract class Tree<in T> { abstract fun tpe(): @UnsafeVariance T abstract fun withType(t: Type): Tree<Type> }