如何解决为什么 Java 不允许 Throwable 的泛型子类?
正如马克所说,这些类型是不可具体化的,这在以下情况下是一个问题:
try {
doSomeStuff();
} catch (SomeException<Integer> e) {
// ignore that
} catch (SomeException<String> e) {
crashAndBurn()
}
两者SomeException<Integer>
和SomeException<String>
都被擦除为相同的类型,JVM
无法区分异常实例,因此无法判断catch
应该执行哪个块。
解决方法
根据Java 语言规范,第 3 版:
我想了解为什么做出这个决定。通用异常有什么问题?
(据我所知,泛型只是编译时的语法糖,Object
无论如何它们都会在.class
文件中被翻译,所以有效地声明一个泛型类就好像它里面的所有东西都是一个Object
.
如果我错了,请纠正我.)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。