Tag: 反思

Kotlin:如何访问Delegate的get-和setValue方法?

我一直想知道如何委托属性 (“由”的关键字)的工作。 我通过契约得到了委托(“by”的右边)必须实现一个get和setValue(…)方法,但是怎样才能确保编译器以及如何在运行时访问这些方法呢? 我最初的想法是,很明显,代表们必须实施某种“SuperDelegate” – 接口,但似乎并非如此。 所以剩下的唯一选择就是使用Reflection来访问这些方法,可能在语言本身的低层实现。 我觉得有些奇怪,因为根据我的理解,这将是相当低效的。 此外,reflectionAPI甚至不是stdlib的一部分,这使得它更怪。 我假设后者已经是(部分)答案。 所以让我再问你下面的问题:为什么没有声明getter和setter方法的SuperDelegate-Interface? 那不会更清洁吗? 以下对于这个问题并不重要 所描述的接口甚至已经在ReadOnlyProperty和ReadWriteProperty中定义了。 要决定使用哪一个可以取决于我们是否有val / var。 或者甚至省略,因为在val上调用setValue方法被编译器阻止,只能使用ReadWriteProperty接口作为SuperDelegate。 可以说,当要求代表实现某个接口的时候,构造会变得不那么灵活。 虽然这会假定作为代表使用的类别可能不知道这样使用,但我认为这是不太可能的,因为有必要的方法的具体要求。 如果你仍然坚持,这里有一个疯狂的想法:为什么不甚至使这个类通过扩展实现所需的接口(我知道这是不可能的,但现在,但是,为什么不呢?可能有一个好’为什么不’,请让我知道作为一个旁注)。