如何在Kotlin中初始化引用变量

时间:2017-06-26 17:38:10

标签: java kotlin

在Java中,可以使用null初始化引用变量,例如,可以像这样初始化String变量:

Scanner sc = new Scanner(System.in);

String hometeam;
String awayteam;
int homescore;
int awayscore;
ArrayList<MatchResult> list = new ArrayList<>();

System.out.println("please enter match results:");
while (sc.hasNextLine()) { // better than the for loop

    String line = sc.nextLine();
    if ("stop".equals(line)) {
        System.out.println(Arrays.toString(list.toArray()));
        return; // exit
    }
    String results[] = line.split(" : "); // parse strings in between

    hometeam = results[0];
    awayteam = results[1];
    homescore = Integer.valueOf(results[2]);
    awayscore = Integer.valueOf(results[3]);

    list.add(new MatchResult(hometeam, awayteam, homescore, awayscore));
}

但在Kotlin中,重点是尽量避免使用null。那么如何在不使用null

的情况下初始化属性
String str = null;

4 个答案:

答案 0 :(得分:5)

Kotlin的观点不是永远不要使用null(和可空类型),而是要使用方便的语言结构安全地使用它而不是害怕它。尽管尽可能使用非可空类型是理想的,但您不必总是避免使用它们,这就是为什么存在各种null处理结构(安全调用,Elvis运算符等)的原因。

如果你可以延迟创建你的变量,直到有东西分配给它,那就是一个解决方案。如果你不能,那么将它标记为可空并为其分配null是完全没问题的,因为编译器会保护你不用它来做危险的事情。

答案 1 :(得分:4)

用户lateinit个关键字。需要使用,然后初始化

private lateinit var str : String
fun myInit(){
    str = "something";
}

注意:访问未初始化的lateinit媒体资源会产生UninitializedPropertyAccessException

但是,lateinit不支持基本数据类型,例如Int

答案 2 :(得分:0)

你可以做到

var str: String

...

str = "Some Awesome Value"

如果你想让它可以为空,你可以做到

var str: String?

答案 3 :(得分:0)

作为选项:

var str: String by Delegates.NotNull()