I cannot find a way to get from an instance-bound property to the respective class property, e.g. from ::myVal
to MyClass::myVal
.
I feel, that this should be possible since ::myVal
is just a specialized case of MyClass::myVal
.
Do I miss something?
I am not an expert on Kotlin reflection.
But usually, it is very easy to get from a general case to a specialized case, but not easy to get from a specialized case to the general case.
If you have the means to determine the age of any person, it will be easy to determine the age of your uncle Herbert. But in the opposite direction, it is not true: Just knowing how to determine the age of your uncle Herbert does not give you the ability to determine everyone’s ages.
Your case has the same problem: KProperty0
may be the property of one specific object (this = “Uncle Herbert”), but it does not automatically contain a way to get this property of any other object of the same type.
The doc of KProperty0
even states that it can be a property that has its receiver bound to it (“Uncle Herbert”), but it can also be a property that is defined in a receiverless context. So, it is even possible that it is not “an int that is bound to some fixed object” - it could even be “just an int”. Therefore, in this case it is impossible to get a (meaningful) general case back from it.
Ah, yes, you are of course right regarding the general situation. A KProperty0
might be something different from a member value, I didn’t think about it.
What I thought was, that ::myProp
could (under the hood) be something like a KInstanceProperty
which still knows its bound object instance. In this case it would be possible to go from instance to class and thus to the respective MyClass::myProp
reference.
But as ::myProp
just ends up being an ordinary KProperty0
, the instance information is lost (or hidden).
So I fear there is no solution for my request, unless they introduce a special member property type.