This is an Android lint rule that forbids the use of the !! operator in Kotlin.
Import with gradle:
repositories {
maven {
url "https://dl.bintray.com/dananas/android"
}
}
dependencies {
lintChecks "com.github.dananas:no-exclamations:0.1.0"
}The code won't compile if abortOnError is set to true.
android {
lintOptions {
abortOnError true
}
}Unlike Java, Kotlin natively supports nullable types.
By using !! not only you throw away this functionality, your code becomes error prone and sometimes non-obvious, because one needs to know the whole lifecycle of the instances !! was used for.
Consider using TheGood way:
class TheGood {
private var name: String? = null
fun setup() {
name = "Clint Eastwood"
}
override fun toString(): String {
return requireNotNull(name) { "Name is not set!" }
}
}class TheBad {
private var name: String? = null
fun setup() {
name = "Lee Van Cleef"
}
override fun toString(): String {
return name!!
}
}class TheUgly {
private lateinit var name: String
fun setup() {
name = "Eli Wallach"
}
override fun toString(): String {
return name
}
}Apache-2.0