如何避免对类的可选属性使用!
class PostDetailsActivity {
private var post: Post? = null
fun test() {
if (post != null) {
postDetailsTitle.text = post.title // Error I have to still force using post!!.title
postDetailsTitle.author = post.author
Glide.with(this).load(post.featuredImage).into(postDetailsImage)
} else {
postDetailsTitle.text = "No title"
postDetailsTitle.author = "Unknown author"
Toast.makeText(this, resources.getText(R.string.post_error), Toast.LENGTH_LONG).show()
}
}
}
我应该创建一个局部变量吗?我认为使用!!
不是一个好的做法
这:
if (post != null) {
postDetailsTitle.text = post.title // Error I have to still force using post!!.title
} else {
postDetailsTitle.text = "No title"
}
可以替换为:
postDetailsTitle.text = post?.title ?: "No title"
如果左边的表达式。:不为空,则elvis运算符返回它,否则它将表达式返回到右边。
您可以使用apply:
fun test() {
post.apply {
if (this != null) {
postDetailsTitle.text = title
} else {
postDetailsTitle.text = "No title"
}
}
}
或具有:
fun test() {
with(post) {
if (this != null) {
postDetailsTitle.text = title
} else {
postDetailsTitle.text = "No title"
}
}
}
我正在尝试获取一些类属性的类型,以便强烈键入我的静态编程语言代码。在打字稿中,我们可以这样做(愚蠢的例子,但这是为了解释) 这样做的好处是,如果我需要更改“_prop”的类型,不需要重构整个代码,因为类型是通过< code>Test["_prop"]找到的。在科特林有办法做到这一点吗? 我在Kotlin中见过反射函数,但无法得到我想要的 科特林代码:
我有一个开放的静态编程语言类,其属性为。 有一个带有函数的Java接口。 我有一个子类继承自open Kotlin类并实现Java接口。 遇到平台声明冲突: 公众开放式娱乐 我尝试过: 以及: 但是,因为这些是继承的方法,所以我实际上不能覆盖其中任何一个的JvmName。 有什么办法可以让这一切顺利吗?
我正在为一些JSON建模,并使用以下几行代码 随着: 但是,请继续查看错误:。 你知道为什么吗? 仅供参考,JSON看起来像:
假设我只希望在生成的equals和hashCode实现中包含一个或两个字段(或者排除一个或多个字段)。对于简单类,例如: Groovy有以下特点: 龙目岛有: 静态编程语言中这样做的惯用方法是什么? 只是感觉不对。。。我真的不希望是可变的,而且额外的构造函数定义很难看。
我有这个功能 我用它来表示,我知道T现在不是空的,所以给我它的非空的形式。 我对函数不满意,有更好的方法吗?我觉得我错过了一些基本的东西
如何使用自定义setter声明属性,但在Kotlin中没有getter?例如,在安科,他们这样做: 但在我看来,这有点骇人。这样做对吗?如果是,那么当一个项目没有Anko依赖关系时,情况会怎样呢? 附言:让我说清楚——我想没有吸气剂,而不是私人吸气剂