布尔型 kotlin/java NullPointerException

问题描述 投票:0回答:1

我对这段结合了 Kotlin 和 Java 的代码有疑问。当我运行 main 方法时,它运行良好。但是,当我在调试模式下运行它时,我遇到了 it.adminRole 的 NullPointerException 异常,但没有遇到 it.function 的异常。我需要对此进行解释。

public class Role {

    public String function;

    public Boolean adminRole;

    public Role(){

    }
    public Role(String function, Boolean adminRole) {
        this.function = function;
        this.adminRole = adminRole;
    }

}
public class User {

    public String name;
    public String surname;

    public Role role;

    public User(){

    }
    public User(String name, String surname, Role role) {
        this.name = name;
        this.surname = surname;
        this.role = role;
    }
}
fun User.getUser(): TestUser? =
    this.role?.let {
        TestUser(
            adminRole = it.adminRole, //in debug mode i get NullPointerException( i want to understand why??)
            function = it.function, //in debug mode i get null value
        )
    }

fun main() {
    val user = User().apply {
        role = Role()
    }
    user.getUser()

}

data class TestUser(
    val adminRole: Boolean? = null,
    val function: String? = null,
)
java kotlin boolean
1个回答
0
投票

Java 对象引用类型,如 Boolean,默认初始化为 null。如果您希望它具有非空初始值,您应该在构造函数中这么说。

我会尝试这个:

public class Role {

    public final String function;

    public final Boolean adminRole;

    public Role() {
        this("", Boolean.False);
    }

    public Role(String function, Boolean adminRole) {
        this.function = function;
        this.adminRole = adminRole;
    }
}

不建议使公共变量可变。我将两者都标记为final,以防止初始化后修改。

我还建议您的默认构造函数调用完整的构造函数并详细说明默认值。它让你的意图更加清晰。这意味着您考虑了默认构造函数,而不是让 IDE 自动为您生成它。

© www.soinside.com 2019 - 2024. All rights reserved.