我知道泛型类型不能扩展Throwable,我知道这是没有意义的,因为类型擦除(只在运行时抛出异常)和其他微妙的东西。Java - 为什么不能在catch子句中输入参数?
但是Java允许类型参数被Throwable的界定其实下面的代码是合法的
class MyClass<T extends Throwable> { /*body of the class */ }
什么是非法在catch子句
try { //do something that throws exception // }
catch(T e) /* ILLEGAL!!! DOESN'T COMPILE */ {}
使用T
参数我可以理解这个约束的唯一原因是,类型参数,因为擦除,被它的边界类型取代,在这种情况下,这个例子是Throwable
。 但类型参数也可以由一个以上的边界类型由Object
为界,所以我可以有这种情况
class MyClass<T extends Object & Throwable> [*]
在这种情况下T
擦除之后被替换,我知道一个Object
(即Throwable
类型的不)变量不能在catch子句中。
让我知道这是否是这个Java约束的原因。谢谢。
编辑: 由于davidxxx让我注意到,这个类声明不编译,因为Throwable
不是一个接口。
'class MyClass'不会编译。您只能在第一种类型后指定接口。所以它应该是'MyClass '。但即使如此,你也会对'catch'语句有相同的编译器限制。 –
davidxxx
你说得对。 Throwable不是一个接口。 “ - ”后缀误导了我。 – Vin