JAVA api验证/异常处理

标签 java api validation

编写 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/

相关文章:

用于解析 latex 或 MathML 字符串的 Java 或 Scala 库

javascript - Facebook XMPP 聊天 API - 设备优先级

python - 外部 API RabbitMQ 和 Celery 速率限制

forms - h :inputFile value becomes blank after submit or validation fail of other input, 如何保留其值?

php - 如何检查 html 表单中的必填字段是否已填写?

java.lang.NoClassDefFoundError : android. 媒体.ThumbnailUtils

java - 使用 PDFBox 填写表单时如何替换丢失的字体?

java - 用户注册与 Facebook 连接

r - 使用 R 访问 Propublica API

javascript - Internet Explorer,表单验证中的 ng-pattern 和输入类型 "number"