Tag: init

如何在init块kotlin中得到exception

下面的代码,在init函数中我创建一个Person对象,并有一个exception,现在我想停止像java返回catch的进度。 我该怎么做? class Person { val age: String = “10” private lateinit var person: Person init { try { person = get(2) } catch (exception: Throwable) { } println(“—————-do it $person.age”) } fun get(i: Int): Person { when (i) { 1 -> { return Person() } else -> { throw MyException(“aaaaaaaaa”) } } } }

初始块位置在Kotlin上课

我最近遇到了一种情况,我的标准variables的值被默认值所替代,即使我已经使用init块的构造函数赋值了。 我试过的是: class Example(function: Example.() -> Unit) { init { function() } var name = “default name” } // assigning it like this: val example = Example { name = “new name” } // print value print(example.name) // prints “default name” 在挣扎了一下之后,我发现init块的位置很重要。 如果我把init块放在类的最后一个,它首先用缺省值初始化名称,然后调用用“new name”替换值的函数()。 如果我把它放在第一,它没有find名称,它被替换为“默认名称”时,属性被初始化。 这对我来说很奇怪 任何人都可以解释为什么发生这种事

何时使用lateinit,init块和companion对象。 Kotlin

我正在从开发人员的网站的Android蓝牙聊天项目,我正在尝试使用Kotlin而不是Java。 我是Kotlin的新手,我只是对使用我的init块和lateinit关键字以及我的伴侣对象的“正确”方式有些混淆。 在我张贴的代码我没有伴侣对象,但我想知道如果我应该。 到目前为止,我主要只是使用伴侣对象来模仿java的静态类成员,或者有时包含类常量。 至于我的init块我基本上是用于构造函数。 也就是通过类声明中定义的实际构造函数传入的成员的赋值。 至于lateinit,我用这个来声明我不想立即初始化的成员,也不想做空。 请让我知道如果这是正确的用法或事情的改变,如果它不是。 这是我的代码: inner class AcceptThread(val secure:Boolean) : Thread(){ lateinit var mmServerSocket:BluetoothServerSocket lateinit var mSocketType:String init { var tmp:BluetoothServerSocket? = null mSocketType = if (secure) "Secure" else "Insecure" try { if (secure){ tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE, UUID_SECURE) } else{ tmp = mAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME_INSECURE, UUID_INSECURE) } }catch (ioe:IOException){ Log.e(TAG, "Socket Type: $mSocketType […]