java - Kotlin val 赋值

标签 java android kotlin

遇到这个问题并希望用最少的重复代码来做到这一点。在Java中我会这样做(作为一个老Java程序员)。仅供引用,dataMap<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/

相关文章:

java - 在第一级提取 jsoup 中的元素,无递归

android - 在 JobService 上调用 StopSelfResult

android - 设置 Android 照片 EXIF 方向

java - RxJava 结合最新调试

android - Android Webview仅在某些设备上加载

java - Go 的并发 Java 示例

java - 为什么我有一个永无止境的 do-while 循环?

java - 如何解决此问题 : Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference

java - 如何将可绘制对象的 int ID 存储在 XML TypedArray 中

android - 如何从 Jetpack Compose TextField 关闭虚拟键盘?