gpt4 book ai didi

JAVA api验证/异常处理

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:47:09 24 4
gpt4 key购买 nike

编写 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 (如果有人感兴趣的话),但需要一些指导。

  1. http://lcsd05.cs.tamu.edu/slides/keynote.pdf
  2. Java: checked vs unchecked exception explanation
  3. http://docs.oracle.com/javase/tutorial/collections/interoperability/api-design.html

最佳答案

尽可能不要让最终用户搞砸。

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com