设置一个字段的值,而不用调用set方法 – Kotlin

我一直在使用Kotlin在Android中开发一些应用程序,而现在我想要做的是在定义的类中设置一个字段值,而不用调用setter方法。

这里是我的课堂里的代码:

var projectList: List? = null set(value) { saveProjects(value as ArrayList) 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中,可以通过不可见的fieldvariables访问该field

但是也许还有一些其他方法可以满足你的要求。 这里有两个例子。 你不需要严格按照他们的要求,而是可以把他们结合起来,制定你想要的任何解决方案。

您可以使用另一个shell属性充当您的实际属性的setter:

 class Example1 { var fieldProperty: Int = 0 var setterPropertyForField: Int get() = fieldProperty set(value) { fieldProperty = value } } 

您可以像使用JVM字段和set方法在Java中那样使用setter。 @JvmField可能不是必需的。

 class Example2 { @JvmField var fieldProperty: Int = 0 fun setField(value: Int) { fieldProperty = value } } 

您可能可以访问该字段并通​​过reflection进行更改,但我不建议采用这种方法。 这可能只会导致问题。