Genéricos de Kotlin e inferencias de types incorrectos

Considere un class Item general y un class Event específico que lo henetworkinga:

 open class Item<T> { fun copyFrom(item: T) { if (this is Event && item is Event) { owner = item.owner value = item.value } } } class Event : Item<Event> { open var owner = "" open var value = 0 } 

Gracias a la inferencia de tipo, no tenemos que convertir Item to Event y podemos acceder directamente al owner y al value . Sin embargo, dice que el item es de tipo T y no se puede convertir a Event en el item is Event cláusula de item is Event . Creo que esto no debería suceder ya que esta cláusula es correcta en Java.

EDITAR:

Soy consciente del hecho de que la implementación de copyFrom debe hacerse en Event , pero esto es solo para demostrar el problema de inferencia de tipo.

    Incluso cuando resuelves los problemas sintácticos: no hagas esto.

    Está creando un contenedor genérico, que verifica explícitamente si entra una subclass distinta. Para realizar un downcast y acceder a los campos de la subclass.

    Esto es como lo opuesto a un buen layout OO. ¡Tu class base no debería saber nada sobre ninguna subclass!