当前位置: 首页 > 知识库问答 >
问题:

Kotlin中的基元类型属性不允许使用lateinit修饰符

能文华
2023-03-14

我在Kotlin中定义了一个实例变量,并希望在活动oncreate方法中初始化它。

var count: Int
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    count.inc()
}
lateinit var count: Int
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    count.inc()
}

Kotlin中有什么方法可以做到这一点吗?

共有1个答案

伏星汉
2023-03-14

有几种方法可以解决这个问题。

您可以用默认值初始化它(例如,0-1或其他任何值),然后在逻辑指定时初始化它。

或者通过使用delegates.notnullcheck notnull告诉编译器count稍后将在此代码中初始化。

var count: Int by Delegates.notNull<Int>()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // You can not call `Int.inc()` in onCreate()` function until `count` is initialised.
    // count.inc()
    // **initialise count** 
}
var count:Int by lazy {
    // initialise
}

现在你可以决定用什么了。

希望能有所帮助。

 类似资料:
  • 我的application.properties(读取环境变量) MyService类: 给它赋值并不能解决问题。例如,用 null 对于我所读的内容,我需要一个委托的(https://kotlinlang.org/docs/reference/delegated-properties.html),但我不能完全理解它。另外,如果有一个“更干净”的解决方案,我不想编写另一个方法来设置属性。有什么想法

  • 但我还是不断地出错。知道为什么吗?我运行了rake db:reset、rake db:migrate和git push以确保更改了本地数据库。然后我运行git、heroku push和heroku run rake db:reset,但我一直得到那个错误。我是不是漏掉了什么?谢谢

  • 问题内容: 我有一个JPA实体,其属性设置为 但是,当我在JBoss 6上进行部署时,该应用程序会抛出一条错误消息: 我使用Hibernate 3.5作为JPA 2.0实现。 我应该使用什么来引用外键列? 问题答案: 使用代替:

  • 本文向大家介绍iOS中属性修饰符的作用?相关面试题,主要包含被问及iOS中属性修饰符的作用?时的应答技巧和注意事项,需要的朋友参考一下 ios5之前是MRC,内存需要程序员进行管理,ios5之后是ARC,除非特殊情况,比如C框架或者循环引用,其他时候是不需要程序员手动管理内存的。   ios中当我们定义属性@property的时候就需要属性修饰符,下面我们就看一下不同属性修饰符的作用。有错误和不足

  • 我对react、react hooks和js/ts非常陌生。 目前,我正在编码一个简单的按钮,它通过useContext获取一个状态,并通过useReucer和调度函数更新该状态。 我试图将我所有的代码分离到特定的文件中。来自减速器的调度函数在提供程序中作为值传递。 当我在使用者组件中调用传递的函数时,我可以给它一个任何类型的值(在我的示例中是数字)给调度器。我在上下文、reducer等中设置了所

  • 更新2020-12-23 正如@slaw所说,这是kotlin编译器的行为,它是有效的,因为JVM使用地址而不是“签名”调用正确的方法。 我遇到了一种情况,似乎Kotlin允许子类创建与超类的getter相同的签名。 通常,函数具有相同的签名和不同的返回类型是不允许的。所以我对这种情况感到困惑。我不确定这是不是故意的。 如果我们看看反编译的Java代码,有两个方法具有相同的签名和不同的返回类型,这