java - 接下来的情况有什么区别

标签 java exception throwable

请告诉我以下情况之间的区别:

public class Test {
    private static < T extends Throwable > void doThrow(Throwable ex) throws T {
        throw (T) ex;
    }

    public static void main(String[] args) {
        doThrow(new Exception()); //it's ok
    }
}
这种情况下没有编译错误
public class Test {
    private static < T extends Throwable > void doThrow(Throwable ex) throws Throwable {
        throw (T) ex;
    }

    public static void main(String[] args) {
        doThrow(new Exception()); //unhandled exception
    }
}
有编译错误

最佳答案

您现在在问题中拥有它的方式使其有效,因为 T推断为 RuntimeException (我记得这是因为 @SneakyThrows):

private static < T extends Throwable > void doThrow(Throwable ex) throws T {
     throw (T) ex;
}
基本上是 JLS说如果你声明了一个具有 throws XXX 的方法,其中 XXX 的上限是 ExceptionThrowable , XXX推断为 RuntimeException .

关于java - 接下来的情况有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62958419/

相关文章:

java - 字符串越界异常

C++非完全构造的对象释放

android - NfcA.transceive(byte[] data) 抛出 TagLostException

Java Exception toString() inclusive 原因

java - IntelliJ IDEA mac os 键盘映射 ^ 不工作

java - 有没有更快的方法来比较数字是否在范围内?

java - 是否有适用于 SWT 的 DateTime 小部件?

32 位和 64 位操作系统上的 Java 版本

java - 断言错误和断言

java - 如何限制那个子类不能泛型?