问题标签 [delegated-properties]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Kotlin:如何在 Java 中使用委托属性?
我知道您不能在 Java 中使用委托属性语法,并且不会像在 Kotlin 中那样获得“覆盖”set/get 运算符的便利,但我仍然想在 Java 中使用现有的属性委托。
例如,一个简单的 int 委托:
当然,在 Kotlin 中我们可以这样使用:
但是我们如何IntDelegate
在 Java 中以某种形式使用呢?这是开始,我相信:
然后直接使用函数。但是我怎样才能使用这个getValue
功能呢?我为它的参数传递什么?如何获得KProperty
for Java 字段?
javascript - ajax动态创建的元素不能使用委托事件
我是 javascript/jquery 的初学者。我想使用委托事件,因为我创建了一个动态类,并且我想获取它的数据值。
现在我做了这样的:
我想获取<a>
标签中数据值的值。
testing - 如何测试委托属性的生成器?
在我当前的项目中,有一个类稍后将由许多其他人实现。此类为委托属性提供了一些生成器。
这个基类可以这样使用:
现在我想测试这些委托生成器。其中一些包含我想测试的逻辑,但现在我只想知道每次调用它们时都会返回一个新实例。
现在我的问题是:如何测试这些生成器?
生成器在扩展类之外是不可见的,所以我不能简单地创建它的实例并调用这些方法。
properties - 不能将自定义 getter 与委托属性一起使用
我是 kotlin 的新手,无法弄清楚这个问题。
我有一个不可为空的属性,可能会使用也可能不会使用。因此,我以一种懒惰的方式委托它,以便在需要时对其进行初始化。
但是,我还需要在每次访问该对象时设置该对象的某些属性。
但是我不能使用自定义 getter,因为该属性是委托的。我如何以最好的方式实现这一目标?
kotlin - 如何提高懒惰的委托?
我如何改进这个声明:
就像我自己的委托生成器一样html
:
kotlin - 如何在 Kotlin 中获取变量的名称?
我的应用程序中有一个 Kotlin 类,它有很多属性,我想要构建一个将变量名存储在字典中的方法。字典看起来像这样:
这样做的目的是存储对某个属性所做的更改,我将变量的名称存储为键,并在 Pair 中存储旧值和新值。为了通知更改,我使用观察者模式。因此,每当从属性调用 setter 时,都会通知更改并将其存储到字典中。
下面的代码导致以下结果:
HashMap("age", (44, 45))
现在我只是将变量名硬编码为字符串,所以我的问题是:
Kotlin中如何动态获取变量名?
我在 Java 中看到了同样的问题:Java Reflection: How to get the name of a variable?
还有一些关于同一主题的其他问题声称这是不可能的:Get the name property of a variable
我可以理解无法获取变量的名称,因为简单的编译器没有该信息,但我仍然很想看看其他人是否有任何解决此问题的方法。
kotlin - 如何在 Kotlin 中匿名传递委托属性?
让我们假设一个简单的类:
我想通过传递惰性委托来创建类的实例:
但我不需要样板lazyP
变量。如何写一个单行字?就像是:
kotlin - DelegatedProperty 反射不适用于发布版本
在运行时,我需要访问委托属性的委托实例中的属性。
当我在调试中编译以下代码时,它工作得很好:
当我在调试中调用“doStuff”方法时,“key”val 将获得“This is the key”字符串。
但是,当我在发行版中编译此代码时,出现错误:
2019-11-07 16:16:04.141 7496-7496/? E/AndroidRuntime:致命异常:主进程:com.trax.retailexecution,PID:7496
eaaaj0:属性“somePropGoesHere”(JVM 签名:getSomePropGoesHere()I)未在 com.trax.retailexecution.util.Potato 类中解析
在 eaaapc(KDeclarationContainerImpl.kt:40)
在 eaaaz$d.invoke(KPropertyImpl.kt:4)
在 eaaal0.a(ReflectProperties.java:4)
在 eaaaze(KPropertyImpl.kt:2)
我不确定如何
在 eaaaz$e.invoke(KPropertyImpl.kt:1)
在 eaaam0.a(ReflectProperties.java:3)
在 eaaazi(KPropertyImpl.kt:1)
在 cmabaa(DefaultConfigurationFactory.java:82)
在 cmabaa(DefaultConfigurationFactory.java:153)
在 com.trax.retailexecution.util.Potato.getKey(Potato.kt:1)
在 mynamespacegoeshere.PotatoShredder.doStuff(Potato.kt:2)
我认为它与proguard有关,因为我们在压缩/收缩期间删除了类和/或方法,但我真的找不到正确解决问题的方法。
java - kotlin 的哪个特性可以作为通过 java 代理拦截方法的替代品
在 java 中,如果我想拦截一个类的方法调用,我可以使用Proxy.newProxyInstance()
并提供一个InvocationHandler
实现invoke()
.
我已经看到,在 kotlin 中,您可以使用委托属性来拦截属性访问。
kotlin 是否有任何特性可用于为方法提供类似的功能?
function - 函数内部的委托属性
我真的不明白为什么我们可以在函数中使用委托属性。我们不能在函数内部创建属性,因为在函数内部我们只能创建变量。
那么怎么可能在函数内部创建一个委托属性呢?
这行代码是函数内部的委托属性,我不明白为什么会这样。
它有getter和setter,对我来说没有意义