我想检查一些Scala编程的最佳实践,因为我是Scala的新手.我在网上读到了Scala除了"特殊"情况(不包括参数检查)之外通常不会使用异常的情况.现在在我的项目中我使用了很多require,所以我想知道更好的类型检查方法是什么.
例如,如果我有一个班级
class Foo(String bar){
require(StringUtils.isNotEmpty(bar), "bar can't be empty")
}
Run Code Online (Sandbox Code Playgroud)
检查吧我有什么其他选择?我是否像这样创建一个伴侣对象
Object Foo {
def apply(bar: String) = Try[Foo] {
bar match = {
case null => Failure("can't be null")
//rest of checks
case _ => Success[Foo]
}
}
Run Code Online (Sandbox Code Playgroud)
或者我应该使用Option吗?
另外,对于scala方法,如何检查方法的参数?如果我已经返回一个Option,如果我得到一个错误的参数,我是否只返回一个空选项?这是不是意味着当我使用方法的返回时我必须检查一个空选项,并且不会抛出异常允许更具体的消息?(例如,运行时异常不能使用空值).
我认为你的伴生对象的 Success 部分也会返回 Foo() 对象?
Object Foo {
def apply(bar: String) = Try[Foo] {
bar match = {
case null => Failure("can't be null")
//rest of checks
case _ => Success[Foo](new Foo(bar))
}
}
Run Code Online (Sandbox Code Playgroud)
Success要使用它,您可以对从 Foo(bar) 获得的内容执行一些操作:
val hehe = Foo(bar).map(foo => foo.someString()).getOrElse('failed')
Run Code Online (Sandbox Code Playgroud)
Try 方法将自动将 someString() 生成的异常或您在 Failures 中执行的其他操作所生成的异常包装起来。如果您想检查 的参数foo.someString(),您可以执行与您的apply()方法类似的操作。这与在条件下抛出异常没有太大区别,但我认为它更好,因为“catch 块”将位于recover()or中recoverWith()。如果您的代码未设计为从上到下链接,您始终可以退出Tryusing 。getOrElse()Try
| 归档时间: |
|
| 查看次数: |
766 次 |
| 最近记录: |