在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;
答案 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()