我一直在使用 Kotlin 在 Android 中开发一些应用程序,我目前想做的是在定义类中设置一个字段值而不调用 setter 方法。
这是我的类中的代码:
var projectList: List<Project>? = null
set(value) {
saveProjects(value as ArrayList<Project>)
field = value
}
//GO to the database and retrieve list of projects
fun loadProjects(callback: Project.OnProjectsLoadedListener) {
database.projectDao().getAll().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ success ->
callback.onProjectsLoaded(success)
//Here i don't want to save the projects, because i've loaded them from the database
this.projectList = success
},
{ error -> GenericErrorHandler.handleError(error,callback.retrieveContext())}
)
}
有没有人知道不用调用 set(value)
方法就可以做到这一点的方法?
最佳答案
您只能直接从 setter 访问该字段。在 setter 中,可以通过不可见的 field
变量访问该字段。
不过,也许还有其他一些方法可以满足您的要求。这里有2个例子。您不必完全遵循它们,而是也可以将它们组合起来以制定您想要的任何解决方案。
您可以使用另一个 shell 属性作为实际属性的 setter :
class Example1 {
var fieldProperty: Int = 0
var setterPropertyForField: Int
get() = fieldProperty
set(value) {
fieldProperty = value
}
}
您可以像在 Java 中使用 JVM 字段和 set 方法一样使用 setter。 @JvmField
可能不是必需的。
class Example2 {
@JvmField var fieldProperty: Int = 0
fun setField(value: Int) {
fieldProperty = value
}
}
您可能可以访问该字段并通过反射更改它,但我不推荐这种方法。这可能只会导致问题。
关于android - 在不调用 set 方法的情况下设置字段的值 - Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47353590/