这肯定是个愚蠢的问题,但我对Kotlin真的是个新手,我没有找到任何解决办法。
如何声明类字段?就像我们可以在Java中拥有它一样:
protected SharedPreferences mSharedPreferences;
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
protected var sharedPreferences : SharedPreferences
在oncreate()
中:
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
但我得到一个警告:“属性必须初始化或抽象”
如果您想在构造函数外部初始化属性,那么后期初始化的属性就是您需要的。使用lateinit
修饰符声明属性,这将允许跳过否则所需的初始值设定项,并将使属性访问以异常方式失败,直到为其分配了某个有意义的值:
protected lateinit var sharedPreferences: SharedPreferences
问题内容: 定义 类属性和 初始化 它们之间有区别吗?在某些情况下,您想彼此做一个吗? 例: 以下代码段应指出我的意思。我在那里使用一个原语和一个对象: 与 问题答案: 首先,您不能将原语设置为null,因为原语只是数据,其中是对象引用。如果尝试编译,则会收到不兼容的类型错误。 其次,像在Java中那样,在类中将变量初始化为或在类中声明变量时是多余的,原语默认为(或),对象引用默认为。局部变量不是
问题内容: 定义抽象实例属性而不是属性的最佳实践是什么? 我想写一些像: 代替: 属性很方便,但是对于不需要计算的简单属性来说,这太过分了。这对于将由用户进行子类化和实现的抽象类尤为重要(我不想强迫某人只可以在中编写代码来使用它)。 Python问题中的抽象属性仅建议使用和的答案:它不能回答我的问题。 通过抽象类属性的ActiveState配方可能是正确的方法,但是我不确定。它也仅适用于类属性,不
问题内容: 为什么Kotlin对此抱怨: 编译器抱怨在Line中由处理程序再次发布。这在纯Java中确实有效: 问题答案: Kotlin认为一个属性在其初始化程序结束之前尚未初始化,因此即使在lambda中也无法在其自己的初始化程序中使用该属性。这种语义类似于其初始化程序内部局部变量使用的限制。 有几种解决方法: 使用对象表达式可以引用已声明的对象: } 这仅适用于接口作为lambda的替代品,并
问题内容: 您将如何在Swift中实现以下模式? 所述类被初始化,其中包含的词典JSON数组。这些字典用于初始化类。但是,当访问或属性时,对象的初始化会延迟进行。 问题答案: 看来这个问题已经得到了很大的回答,但是回过头来看原始帖子,这是(IMHO)Swift中相对简洁的翻译。关键是您可以链接惰性属性。请注意,我同时使用了类函数和闭包- 两者都很好。