说我有这段代码:
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
并且我没有&#39 ; t想要将我的所有逻辑移到try
阻止?
答案 0 :(得分:3)
您有几个选择。
第一个选项是将cmd
设为var
并为其指定默认值或null。当然,如果你使cmd
可以为空,你需要在try-catch之后检查null。 (我推荐某种默认值,可能是某种EmptyCommandLine
。
第二个选项是将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")
}