编写 Java API/实用程序时如何处理错误情况
这是我的 API 接口(interface)实现
public void bin2zip(InputStream[] is,OuputStream os, String[] names)
{
//if number of streams and number of names do not match do something
}
我想做的是处理 的长度是
!=
name
的长度的情况。
我该如何处理。在抛出 ArrayOutOfBound
异常之前,我不希望我的 API 做一些工作。我想早点捕获这个。
一个解决方案是这样的:
如果不匹配我抛出
if(is.length==names.length)
throws new Exception("ParemeterValidationException: The inputstream array and name array length should match");
if(containsInvalidFileName(names))
throws new Exception("ParemeterValidationException: The names array length should contain valid filenames");
此外,这是否可以在编译时使用 DataDependency 完成(我可以为 API 创建 ValidationClass 并确保开发人员掌握此对象以传递给此转换 API)或运行时异常是最好的方法吗?
我相信做一个 ValidationClass 会使 API 使用变得复杂
我确实浏览了一些 Material (如果有人感兴趣的话),但需要一些指导。
最佳答案
尽可能不要让最终用户搞砸。
public final class Bin2Zipper {
private final List<InputStream> inputStreams = ...;
private final List<String> names = ...;
public BinZipper() {
}
public void add(final InputStream is, final String name) {
this.inputStreams.add(is);
this.names.add(name);
}
public void bin2zip(final OutputStream os) {
// ...
}
}
流畅的界面可能会更好。那么您的代码将如下所示:
Bin2Zipper.add(is1, name1).add(is2, name2).add(is3, name3).toZip(os);
public final class Bin2Zipper {
private final List<InputStream> inputStreams = ...;
private final List<String> names = ...;
private Bin2Zipper(final InputStream is, final String name) {
this.inputStreams.add(is);
this.names.add(name);
}
public static Bin2Zipper add(final InputStream is, final String name) {
return new Bin2Zipper(is, name);
}
public Bin2Zipper add(final InputStream is, final String name) {
this.inputStreams.add(is);
this.names.add(name);
return this;
}
public void zip(final OutputStream os) {
...
}
}
当客户端开始使用这两个数组时,它们就会下降。在这种情况下,他们必须自己遍历所有条目可能会很烦人。我觉得还是值得的。如果不这样做,则必须立即比较输入的大小。您几乎肯定想抛出一个未经检查的异常,可能是一个 IllegalArgumentException
,就像 Vince 所说的。
关于JAVA api验证/异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25290888/