在不调用 set 方法的情况下设置字段的值 - Kotlin

Set value of a field without calling set method - Kotlin

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

这是我的代码 class:

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 属性 作为您实际 属性:[=14 的 setter =]

class Example1 {
  var fieldProperty: Int = 0

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

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

class Example2 {
  @JvmField var fieldProperty: Int = 0

  fun setField(value: Int) {
    fieldProperty = value
  }
}

您可能可以访问该字段并通​​过反射更改它,但我不推荐这种方法。那可能只会导致问题。