Tag: 代表

如何安全地解决这个空初始化器检查?

我正在写一个测试用例,我需要一些私有属性。 由于这些私人数据是从私人方法生成的,我决定在计算完成后使用反射来检索它们。 后来我想起了委托的财产,并决定写一个总代表。 这是我到目前为止的代码: fun <T> reflect(instance: Any, initOnce: Boolean = true) = ReflectBackedProperty<T>(initOnce, instance) class ReflectBackedProperty<T>(val initOnce: Boolean, val instance: Any): ReadOnlyProperty<Any, T> { var initialized = false lateinit var cache: T // <— (a) override opertaor fun getValue(thisRef: Any, property: KProperty<*>): Any? { @Suppress("UNCHECKED_CAST") if (!initialized || !initOnce) { cache = instance.javaClass.getDeclaredField(property.name).get(instance) as […]

通过委托对象在Groovy中实现抽象类

任何人有关于后续代码块的想法? 尝试实现一个接口或抽象类,而不必手动输入实现。 似乎这个方法methodMissing不完全是诀窍? 可能某种我不知道的授权机制会有帮助? class Outer { private List<String> theStrings = [] class Inner implements List<String> { // error because Inner doesn't truly implement List def methodMissing(String name, args) { return getTheStrings().invokeMethod(name, args) } } List<String> getTheStrings() { return theStrings.collect { it.toUpperCase() } } void someOtherMethod() { List<String> blah = new Inner() // warning for […]

Kotlin:我怎样才能得到一个成员财产的代表团类?

我怎样才能得到一个成员属性的委托类? 通过这个,我的意思是有可能完成这样一个功能: inline fun <reified T> delegationExample(t: T) { for (prop in T::class.declaredMemberProperties) { val delegatedClass = // what to do?! } } 代表团可能看起来像这样: class DelegationExample { operator fun getValue(ref: Any, prop: KProperty<*>) = 0 } 而声明类可能是这样的: object Example { val a by DelegationExample() val b by DelegationExample() val c by DelegationExample() }

Kotlin – 如何使用自定义名称制作地图代理?

我试图让我的头绕着财产代表,我有一个有趣的用例。 有没有可能有这样的事情: class MyClass { val properties = mutableMapOf<String, Any>() val fontSize: Any by MapDelegate(properties, "font-size") } 这将允许我使用地图作为fontSize存储fontSize ,但使用自定义键(即“font-size”)。 如果用于存储诸如可以通过变量( fontSize )访问的用于代码的CSS属性标记的特定用例,但是在遍历地图( font-size: 18px; )时可以正确渲染。

Kotlin由线程局部的懒惰代表财产

有没有一种简单的方法by lazy像ThreadLocal这样每个线程计算出by lazy值来获得委托属性? LazyThreadSafetyMode控制并发初始化, .NONE通过允许多个线程接收不同的值而接近所需的功能,但后续的后期初始化调用引用相同的对象,不管线程返回相同的奇异值,有些情况返回null 。 无论并发初始化还是后期初始化,该属性都会为每个线程缓存一个唯一的值。

如何在kotlin中反射设置委托属性值?

我的实体类: class User : ActiveRecord<User>() { var name by Column(String.javaClass); var id by Column(Int.javaClass); } 现在我想通过反思设置名字值: var clazz = User().javaClass var record = clazz.newInstance() var field = record.getDeclaredField(it + "$" + "delegate") field.set(record,"aa") 然后错误: entity.Column field ActiveRecord4k.User.name$delegate to java.lang.String 如何做到这一点? TY!

Kotlin:我如何避免委托属性中的自动装箱(垃圾)?

在我的软件中,我有一些使用财产授权的各种价值。 这是一个简单的类似的例子,显示了我的工作: class ExampleDelegate<T>(val value: T) { operator fun getValue(thisRef: Any?, property: KProperty<*>) = value } val example by ExampleDelegate(1000) // number larger than 127 (no box cache) 然而,我注意到,引用这个值似乎在EVERY引用上创建了一个自动绑定的对象( java.lang.Integer )。 因为这个值必须每秒钟被引用数百万或者几百次,所以这会导致我的软件产生大量垃圾。 垃圾收集器上放着沉重的压力。 有没有办法避免开销? 如果不是直接的话,有没有什么聪明的方法来“效仿”性能的代表性? 在YouTrack上提交了一个错误报告: https ://youtrack.jetbrains.com/issue/KT-13606

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

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

Kotlin:如何访问构造函数中的属性

考虑以下课程: class Test() { init { log(foo) } val foo = "Bar" } 当我instatiate测试它会产生一个NullPointerException,因为foo似乎没有被初始化。 这种行为实际上是打算? 有没有解决方法?

Kotlin,什么时候通过地图来代表?

我检查了delegate文件,发现有一个提供的委托类型map : class MutableUser(val map: MutableMap<String, Any?>) { var name: String by map var age: Int by map } 但我无法弄清楚没有delegate的版本之间有什么区别,如下所示: class MutableUser(val map: MutableMap<String, Any?>) { var name: String var age: Int } by map代表的常用用法是什么? 谢谢!