[英]JAVA api validation/Exception handling
如何在编写Java API / Utility时处理错误条件
这是我的API接口实现
public void bin2zip(InputStream[] is,OuputStream os, String[] names)
{
//if number of streams and number of names do not match do something
}
我想要做的是处理一个案例,当时长度is
!=
name
长度。
我该如何处理这个问题。 我不希望我的API做一些工作,直到抛出ArrayOutOfBound
异常。 我想早点抓住这个。
一种解决方案是这样的:
如果它不匹配我扔
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使用变得复杂
我确实经历了一些材料(如果有兴趣的话),但需要一些指导。
只要有可能,不要让最终用户搞砸了。
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) {
...
}
}
这些倒下的地方是客户端从两个阵列开始。 在这种情况下,他们必须循环遍历所有条目本身是令人讨厌的。 我认为它仍然值得。 如果不这样做,那么您必须立即比较输入的大小。 你几乎肯定想要抛出一个未经检查的异常,可能是像Vince所说的IllegalArgumentException
。
我认为你比较阵列长度的解决方案是完全合适的。 我想在这种情况下你应该抛出一个IllegalArgumentException; 此异常在标准中定义,并由执行此类检查的大多数标准函数使用。
许多标准库使用这种易于理解的界面。
这就是说我认为你应该更喜欢一个简单的界面,它不会像@Eric所建议的那样滥用 - 每个人都喜欢使用的库是每次第一次使用的库,因为它太简单了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.