scala - 从 Scala 构造函数提前返回

标签 scala constructor exit

我正在为我的“主”类编写构造函数。它做的第一件事是调用一个方法来使用 commons-cli 来解析命令行。如果parseOptions方法返回 false,发生错误,构造函数应退出。

我尝试编写以下代码

if (!parseOptions(args)) return

但是编译器提示我有一个“方法定义之外的返回语句”。

短电话 System.exit(1)或反转 bool 值(并将我的所有其余逻辑放在 if 语句中,有没有办法从构造函数返回“早期”?

我想我可以拥有 parseOptions方法抛出 IllegalArgumentException并在我的 Main 中找到它目的。

谢谢。

最佳答案

不要尝试提前/过早返回,这会使您的代码更难更复杂,因为返回的副作用可能难以理解。而是使用异常来表示出现问题。

您可以在构造函数中使用 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)

关于scala - 从 Scala 构造函数提前返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3547573/

相关文章:

c++ - 对象构造函数 "settings"习语

c++ - 让编译器最终选择使用哪种类型

PHP - 退出 IF block

c++ - 使用 assert 与 exit 或反之有哪些优点或含义?

Scala 2.12 告诉我 Stack 已被弃用,如何准确替换它(以及为什么我在 IntelliJ 中看不到正确的警告)

algorithm - 在 Scala 中更新节点的值?

java - 在 java/scala 中覆盖整个类

scala - 将结构数组分解为 Spark 中的列

C++ 构造函数 : Using an initializer vs setting the values in the definition

Android:生命周期问题——离开应用