我有一個接口Int1
。我有一個類Cls1
實施Int1
。和一個通用類Cls2<Cls1>
。將子類型轉換爲定義爲通用類型的類型
現在我正在寫一個方法:
private void <T extends Int1> test(Cls2<Cls1> arg1) {
...
//I try to cast a Cls2<Cls1> into a Cls2<Int1>: it works
Cls2<Int1> test1 = (Cls2<Int1>) arg1;
//I try to cast a Cls2<Cls1> into a Cls2<T>: doesn't work
Cls2<T> test2 = (Cls2<T>) arg1; //compilation error
}
考慮到T
延伸Int1
,有什麼不對的代碼?
「它的作品」,因爲它是多餘的:你不需要爲自己投射一種類型。 –
「編譯錯誤」,因爲'T'並不總是'Cls1';它*可能*是'Cls1',但它也可能是它的一個子類。 –
當方法簽名中沒有使用「T」時,使方法具有通用性(添加'')。 –
Andreas