Access property delegate in Kotlinは、インスタンスからデリゲートにアクセスすることを約束しています。 Kotlin 1.1からKProperty::getDelegate
を使用できますが、これはデリゲートのインスタンスを返すため、クラスのインスタンスが最初に必要です。インスタンスなしのKotlin代理人タイプへのアクセス
今、クラスのインスタンスを持たずにデリゲートの型を取得したいと思います。さんはCustomDelegate
のインスタンスに委任されているクラスのすべてのプロパティを取得したいカスタムデリゲート型CustomDelegate
でライブラリを考えてみましょう:
KClass<Example>
を持って与えられたが、
Example
のないインスタンスはどうすればよい
class Example
{
var nonDelegatedProperty = "I don't care about this property"
var delegatedProperty1 by lazy { "I don't care about this too" }
var delegatedProperty2 by CustomDelegate("I care about this one")
}
、 CustomDelegate
に委譲されたすべてのプロパティを取得しますか?
最初の解決策を使用すると、委任フィールドと委任フィールドをマップできますか?デリゲートされたプロパティはすべて1つのインターフェイスから継承する必要があるので、これは 'delegatedProperty2'だけを返すことを容易にします。 – msrd0
@ msrd0はい、できます。 'CustomDelegate :: class.java == property.javaField?.type'の条件を' CustomDelegate :: class.java == property.javaField?.type && property.returnType 'の条件に変更することができます。isSubtypeOf(MyInterface :: class.starProjectedType) ' –