此注释不适用于没有支持字段或委托的目标成员属性

And*_*Dev 6 kotlin dagger-2

这是我的代码:

@Module
class SharedPrefs {
    @Module
    companion object {
        val KEY_COOKIE = "cookie"

        @JvmStatic
        @Provides
        fun putPref(key: String, value: String?) {
            val prefs = PreferenceManager.getDefaultSharedPreferences(App.context)
            val editor = prefs.edit()
            editor.putString(key, value)
            editor.commit()
        }

        @JvmStatic
        @Provides
        fun getPref(key: String): String? {
            val preferences = PreferenceManager.getDefaultSharedPreferences(App.context)
            return preferences.getString(key, null)
        }

        @JvmStatic
        @Provides
        var cookie : String?
            get() = getPref(KEY_COOKIE)
            set(value) {
                putPref(KEY_COOKIE, value)
            }

    }
}
Run Code Online (Sandbox Code Playgroud)

最后一个 @provides 上面的 var cookie 生成一个编译错误:

此注释不适用于没有支持字段或委托的目标成员属性

我该如何纠正?

Bar*_*ski 18

尝试使用@get:Provides而不仅仅是@Providesvar cookie.

编辑:

顺便说一句,我想我知道你的意思是什么Providing这个var,我不相信匕首会让你做到这一点。它只会从 getter 读取值并能够Nullable String在图中提供 a 。

你需要用这两个函数(settergettervar cookie在某种形式的包装对象),并提供该包装的匕首,而不是String?