早期从Scala构造函数返回

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)

  • 这不是_return_.但似乎抛出异常实际上更符合他的情况. (3认同)

Ale*_*nov 11

有没有办法从构造函数返回"早期"

不.但是在你的情况下,听起来好像是糟糕的设计.

如果parseOptions方法返回false,则发生错误

在这种情况下,构造函数应抛出异常,而不是正常返回.