【发布时间】:2010-10-04 19:35:21
【问题描述】:
根据Java Language Sepecification,第3版:
It is a compile-time error if a generic class is a direct or indirect subclass of
Throwable.
我想了解做出此决定的原因。泛型异常有什么问题?
(据我所知,泛型只是编译时语法糖,无论如何它们都会在.class 文件中转换为Object,因此有效地声明一个泛型类就好像其中的所有内容都是一个Object。如果我错了,请纠正我。)
【问题讨论】:
-
泛型类型参数被上限替换,默认情况下为 Object。如果你有类似 List,然后在类文件中使用 A。
-
谢谢@Torsten。我以前没想过这种情况。
-
这是一道很好的面试题。
-
@TorstenMarek:如果有人调用
myList.get(i),显然get仍会返回Object。编译器是否将强制转换插入A以便在运行时捕获一些约束?如果不是,那么 OP 是正确的,它最终在运行时归结为Objects。 (类文件当然包含关于A的元数据,但它只是 AFAIK 的元数据。)
标签: java generics exception language-design