标签: delegated-properties

Kotlin:我如何在Java中使用委托属性?

我知道你不能在Java中使用委托属性语法,并且不会像在Kotlin中那样"覆盖"set/get运算符,但我仍然希望在Java中使用现有的属性委托.

例如,int的简单委托:

class IntDelegate {
    operator fun getValue(thisRef: Any?, property: KProperty<*>) = 0
}
Run Code Online (Sandbox Code Playgroud)

在Kotlin当然我们可以这样使用:

val x by IntDelegate()
Run Code Online (Sandbox Code Playgroud)

但是我们如何IntDelegate在Java中以某种形式使用?这是开始,我相信:

final IntDelegate x = new IntDelegate();
Run Code Online (Sandbox Code Playgroud)

然后直接使用这些功能.但是我该如何使用该getValue功能呢?我的参数是什么?我如何获得KPropertyJava字段?

java delegates delegation kotlin delegated-properties

6
推荐指数
1
解决办法
889
查看次数

如何在Kotlin中获取变量的名称?

我的应用程序中有一个带有许多属性的Kotlin类,我想构建的是一种将变量名存储在字典中的方法。字典看起来像这样:

HashMap<String, Pair<Any, Any>>()
Run Code Online (Sandbox Code Playgroud)

这样做的目的是存储对特定属性所做的更改,我将变量的名称存储为键,在对中存储旧值和新值。为了通知更改,我使用观察者模式。因此,每当从属性调用设置器时,都会通知更改并将其存储到字典中。

以下代码导致以下问题:

var person = Person("Harry", 44)
person.age = 45
Run Code Online (Sandbox Code Playgroud)

HashMap("age", (44, 45))

现在,我只是将变量名硬编码为字符串,所以我的问题是:

如何在Kotlin中动态获取变量名?

我在Java中看到了相同的问题:Java思考:如何获取变量的名称?

另外,关于同一主题的其他一些问题声称这是不可能的:获取变量的name属性

我可以理解,不可能获得变量的名称,因为简单的编译器没有该信息,但是我仍然急于查看其他人是否对此问题有任何解决方案。

variable-names kotlin delegated-properties

3
推荐指数
3
解决办法
3007
查看次数

无法将自定义 getter 与委托属性一起使用

我是 kotlin 新手,无法弄清楚这个问题。

我有一个不可为 null 的属性,可能会也可能不会使用。因此,我以一种惰性的方式委托它,以便在需要时对其进行初始化。

private val labelAnimator: ObjectAnimator by lazy {
    ObjectAnimator.ofFloat(this, "floatingLabelFraction", 0f, 1f)
}
Run Code Online (Sandbox Code Playgroud)

但是,我还需要在每次访问该对象时设置该对象的一些属性。

fun getLabelAnimator(): ObjectAnimator {
    labelAnimator.duration = (if (isFloatingLabelAnimating) 300 else 0).toLong()
    return labelAnimator
}
Run Code Online (Sandbox Code Playgroud)

但我无法使用自定义 getter,因为该属性是委托的。我如何以最好的方式实现这一目标?

getter properties kotlin delegated-properties

3
推荐指数
1
解决办法
1994
查看次数