gpt4 book ai didi

用于异常的java条件运算符

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:57:15 26 4
gpt4 key购买 nike

private static int testReturn(final boolean flag) {
return flag ? 1 : 2;
}

private static void testThrow1(final boolean flag)
throws IOException, SQLException {

if (flag ) {
throw new IOException("IO");
} else {
throw new SQLException("SQL");
}
}

当我尝试用 ?: 运算符更改它时,

private static void testThrow2(final boolean flag)
throws
//IOException, SQLException, // not even required
Exception { // compiler wants this.

throw flag ? new IOException("IO") : new SQLException("SQL");
}

这正常吗?

感谢

我在准备 Java 7 特性(例如多重捕获和类型化重新抛出)的演示文稿时确实遇到了这段代码。有趣的。谢谢大家的好答案。我学到了很多东西。

更新

Java 7 针对特定类型的重新抛出进行了改进,对吧?

void throwIoOrSql() throws IOException, SQLException {
}

void rethrowIoAndSql() throws IOException, SQLException {
try {
throwIoOrSql();
} catch (Exception e) {
throw e; // Ok with Java 7
}
}

编译器看不到那些明显的情况有点傻。

throw flag ? new IOException("io") : new SQLException("sql"); // obvious, isn't it?

最佳答案

是的,不幸的是,编译器无法确定您可以抛出这两个异常之一(并且语言规范不要求它)。

这里是一个返回Exception 的三元运算符。这可以是 SQLExceptionIOException,但唯一常见的父类(super class)型是 Exception,因此编译器将在此处看到。

Java 中没有“联合类型”。

与本例相同:

 Object x = flag ? Integer.valueOf(1) : "a string";

这里,x 也必须是一个Object,因为没有其他类型可以表达Integer ||字符串.

关于用于异常的java条件运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16334816/

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