elizarov
11/11/2016, 4:57 AMpublic interface KProperty<out R>
. It is defined with an out
type parameter R
, because it only only returns things of type R
(it never receives them), so a call like User::firstName.test(42)
infers the following call type User::firstName.test<Any>(42)
, becuase Any
is the nearest common supertype between Int
and String
and, because of an out
parameter, KMutableProperty<String>
is a subtype of KMutableProperty<Any>
, so a method test<Any>
, that is applicable to KMutableProperty<Any>
is also Ok to use on a KMutableProperty<String>
, which is a subtype of it.