您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java SneakyThrow抛出异常,类型擦除

Java SneakyThrow抛出异常,类型擦除

如果使用它进行编译,-Xlint则会收到警告:

c:\Users\Jon\Test>javac -Xlint SneakyThrow.java
SneakyThrow.java:9: warning: [unchecked] unchecked cast
    throw (T) ex;
              ^
  required: T
  found:    Throwable
  where T is a type-variable:
    T extends Throwable declared in method <T>sneakyThrowInner(Throwable)
1 warning

基本上是说“ 在执行时并没有 真正 检查这个强制转换”(由于类型擦除)-因此编译器无奈地假设您做的是正确的,知道它实际上不会被检查。

现在只有 编译器 关心已检查和未检查的异常-它根本不是JVM的一部分。因此,一旦您通过了编译器,就可以自由上班了。

我强烈建议您避免这样做。

在许多情况下,使用泛型时会进行“真实”检查,因为某些东西使用了所需的类型-但这并非 总是 如此。例如:

List<String> strings = new ArrayList<String>();
List raw = strings;
raw.add(new Object()); // Haha! I've put a non-String in a List<String>!
Object x = strings.get(0); // This doesn't need a cast, so no exception...
java 2022/1/1 18:17:16 有566人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶