[英]I assert an error cannot happen in Java. How do I code that?
这是我的代码:
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
outputStream.write(signature.getR());
outputStream.write(signature.getS());
outputStream.write(signature.getV());
} catch (java.io.IOException exception) {
// WHAT GOES HERE?
}
Java 文档告诉我这个ByteArrayOutputStream
可能会抛出一个IOException
。 所以编译器要求我把它放在一个try
/ catch
块中。
基于我只连接大约 100 个字节的事实,同时我没有关闭 stream,我预计不会出现任何错误。
或者更清楚地说,我不想处理或传递任何错误。
在 Swift 中,我会使用断言( try!
)来做到这一点。
在 Java 中,我该如何做到这一点,以便此处的异常导致程序终止并且不需要我在整个过程中冒泡异常?
throws
在调用层次结构中向上传播此类异常Checked
?write(int)
的,则可以安全地忽略此特定用例 ByteArrayOutputStream.write(int) 不会抛出已检查异常没有为.write(int)
Doc定义已检查异常
但父 class OutputStream已检查异常。
因此,除非您使用 OutStream 作为引用来保存 ByteArrayOutputStream object,否则catch
块可以留空或什至不需要
以下代码在 JDK 11 编译器和运行时中运行良好
public static void main(String[] args) {
ByteArrayOutputStream b = new ByteArrayOutputStream();
b.write(65);
System.out.println(b.toString());
}
它可以为 null 输入抛出 NPE(技术上这是拆箱错误)
public static void main(String[] args) {
ByteArrayOutputStream b = new ByteArrayOutputStream();
Integer input = null;
b.write(input);
System.out.println(b.toString());
}
OutputStream.write
会抛出检查异常,因此它必须被捕获。但它也可以抛出其他运行时异常。
public static void main(String[] args) {
ByteArrayOutputStream b = new ByteArrayOutputStream();
try {
b.write((byte[])null); // NPE
} catch (IOException e) {
System.out.println(e);
} catch (RuntimeException e) {
System.out.println(e);
}
}
catch (java.io.IOException exception) {
throw new UncheckedIOException(exception);
}
在 Java 8 中引入UncheckedIOException的原因之一是为了隐藏 Java 中对IOException
的滥用,并关闭编译器。 对于不能抛出检查异常的 lambdas 非常有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.