interface Ext, T> interface Message> { fun ext(e: Ext): T } class MyMessage : Message class MyExt : Ext fun , T> Message.extF(e: Ext): T = ext(e) fun foo(m: MyMessage, e: MyExt) { m.ext(e) m.extF(e) }