遇到这个问题并希望用最少的重复代码来做到这一点。在Java中我会这样做(作为一个老Java程序员)。仅供引用,data
是 Map<String, String>
.
Class action = SomeActivity.class;
if (data != null && data.get("abc") != null) {
if (data.get("abc").contains("details")) {
action = OtherActivity.class;
} ... //may have more ifs for other contains()
}
Intent newIntent = new Intent(this, action);
我想在 Kotlin 中做同样的事情,但不重复 null 条件并使用多个赋值行。这就是我到目前为止所拥有的。
val action = data["abc"]?.let {
if (it.contains("details")) {
OtherActivity::class.java
} else {
SomeActivity::class.java
}
} ?: kotlin.run { SomeActivity::class.java }
val intent = Intent(this, action)
对我来说,Java 看起来比 Kotlin 更高效,在 Kotlin 中,我有两个赋值行重复 SomeActivity::class.java
,而在 Java 中,我可以将变量设置为一个类,并且当且仅当所有 null 和 if 条件都检查完毕时,它才会分配新类。那么有没有一种方法可以在 Kotlin 中做到这一点,而无需重复分配 SomeActivity::class.java
行?
最佳答案
对于提供的代码,以下内容应该有效:
val intent = Intent(this,
data?.takeIf { it["abc"]?.contains("details") == true }
?.let { OtherActivity::class.java }
?: SomeActivity::class.java
)
<小时/>
如果您有其他分支,那么您当然应该使用 when
语句。
val abc = data?.get("abc")
val action = when {
abc == null -> SomeActivity::class.java
abc.contains("details") -> OtherActivity::class.java
// other branches
else -> SomeActivity::class.java
}
val intent = Intent(this, action)
关于java - Kotlin val 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51770381/