我知道泛型類型不能擴展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