ari*_*iso 14 java exception-handling
为什么String.indexOf不使用异常但在找不到子字符串时返回-1?
这个问题的目的是:当我们开始自定义异常时.
我相信避免需要返回特殊错误代码是正确的设计路径.
你怎么看?
Pau*_*lin 30
根据经验,如果方法的目的是检查某些东西,那么缺少某些东西不应该是一个例外.如果方法假设某些事情是真的,那么缺少那个东西将是一个例外.因此"File.exists()"不会抛出FileNotFoundException,但"File.open()"会抛出.
z *_* - 18
异常是针对特殊情况,当字符串不包含字母时,这几乎不例外,除非您在某些极端情况下使用它.如果这就是你在做什么,你总是可以选择抛出自己的异常.
Gis*_*shu 16
最后我听到的是......
"当你的方法无法做到它所承诺的时候,你会抛出异常" - Jeff Richter CVC第二版
返回-1几乎和抛出异常一样可怕.正确的方法是使用选项类型,如果语言更好地支持它.在有结果的正常情况下,将结果包装在对象中并返回.否则,您将返回表示"未结果"情况的对象.
在呼叫站点,你必须检查它是哪一个; 你不能只使用返回值因为它们的超类型,它们必须通过模式匹配进行检查.
在伪语法中:
class Option[a] = Some[a] | None,
Run Code Online (Sandbox Code Playgroud)
其中a是泛型类型参数,Some表示带有值的结果,None表示没有值的非结果.
在indexOf的情况下你会有:
Option[Integer] indexOf(char c) = {
if(found) return Some(index)
else return None
}
Run Code Online (Sandbox Code Playgroud)
你用这种方式:
result = "uncle".indexOf('c')
result match {
Some(i) => System.out.println("index was: " + i);
None => System.out.println("no value");
}
Run Code Online (Sandbox Code Playgroud)
如果你从匹配中省略了Some或None(这是一种通用的开关),编译器会给你一个警告.
| 归档时间: |
|
| 查看次数: |
11391 次 |
| 最近记录: |