假设我有这段代码:
val cmd: CommandLine
try {
cmd = parser.parse(options, args)
} catch (ex: ParseException) {
// do stuff
}
// error: cmd is not initialized
val inputArg = cmd.getOptionValue("someArg")
我收到错误是因为 cmd 未初始化,这是预期的,通常我会用 Java 中的 null
值初始化它,但是如果类型是 non-null
并且我不想将我所有的逻辑移动到 try
block ?
最佳答案
您有几个选择。
1) 你可以使用 var
第一个选项是使 cmd
成为 var
并为其分配默认值或 null。当然,如果您使 cmd
可以为 null,则需要在 try-catch 之后检查 null。 (我推荐某种默认值,可能是某种 EmptyCommandLine
)。
2) 更好的是,使用 try-catch 作为表达式
第二种选择是像这样使用 try-catch 作为表达式:
val cmd: CommandLine = try {
parser.parse("options", "args")
} catch (ex: Exception) {
// Must:
// 1) Throw, or error in some other way so as to return Nothing.
// 2) Return a default/failed value for cmd. Maybe something like EmptyCommandLine or FailedCommandLine(ex)
// 3) Make cmd nullable and return null.
CommandLine() // or, error("Unable to parse options!")
}
val inputArg = cmd.getOptionValue("someArg")
}
关于java - 在 try/catch 之前初始化非空类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50918924/