关于在Java中创建API,我有一个设计级别的疑问.假设我有一个课程如下: -
class Test
{
public final static String DEFAULT_ENCODING = "utf-8";
public byte[] encodeIt(String input)
{
try {
return input.getBytes(DEFAULT_ENCODING);
} catch(UnsupportedEncodingException e) {
// do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道,UnsupportedEncodingException
因为我使用静态字符串作为输入,所以永远不会出现toBytes
.encodeIt
做一个没有意义,throws UnsupportedEncodingException
因为我不希望API用户期望并捕获该错误.
在这种情况下,最好的做法是使用空挡块吗?
我做这样的事情:
public byte[] encodeIt(String input) {
try {
return input.getBytes(DEFAULT_ENCODING);
}
catch (UnsupportedEncodingException e) {
throw new ShouldNeverHappenException(e);
// or: throw new IllegalStateException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
(当然,ShouldNeverHappenException是运行时异常).
这样,如果有人碰巧更改了常量值,或者添加了编码参数,该方法将快速失败,并且问题不会被忽视或隐藏在日志文件中.
拥有空的catch块是个坏主意.即使你的推理看起来是正确的,这个设计在某个阶段会导致你无休止的调试和搜索,一旦异常开始发生,你的代码就会吞下它们.我会把你的异常包装在RuntimeException中并抛出它.像这样:
public encodeIt(String input)
{
try {
return input.getBytes(DEFAULT_ENCODING);
catch(UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您的异常将不会隐藏,如果它发生也不会,您的API用户必须满足它.
归档时间: |
|
查看次数: |
238 次 |
最近记录: |