Ral*_*lph 6 constructor scala exit
我正在为我的"main"类编写构造函数.它做的第一件事是调用一个方法来使用commons-cli来解析命令行.如果parseOptions方法返回false,则发生错误,构造函数应退出.
我尝试编写以下代码
if (!parseOptions(args)) return
Run Code Online (Sandbox Code Playgroud)
但编译器抱怨我有一个"返回方法定义之外的语句".
如果没有调用System.exit(1)或反转布尔值(并将所有其余的逻辑放在if语句中,有没有办法从构造函数中"提前"返回?
我想我可以让parseOptions方法抛出IllegalArgumentException并在我的Main对象中捕获它.
谢谢.
olu*_*ies 12
不要尝试早期/早期返回,这会使您的代码更加复杂,因为返回的副作用很难理解.而是使用异常来表示出现问题.
您可以在构造函数中使用require.这不会回来.但似乎抛出异常实际上更符合他的情况.
如:
class MyTest(
private var myValue: Int ){
require(myValue > 0) // Connected to constructor
}
defined class MyTest
scala> val x = new MyTest(10)
x: MyTest = MyTest@49ff4282
scala> val y = new MyTest(-10)
java.lang.IllegalArgumentException: requirement failed
at scala.Predef$.require(Predef.scala:133)
Run Code Online (Sandbox Code Playgroud)
Ale*_*nov 11
有没有办法从构造函数返回"早期"
不.但是在你的情况下,听起来好像是糟糕的设计.
如果parseOptions方法返回false,则发生错误
在这种情况下,构造函数应抛出异常,而不是正常返回.
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |