考慮到我有以下接口:Java泛型 - 有什麼區別?
public interface MyInterface<T extends Number>
在另一類我要聲明這樣一個方法:
public <T extends MyInterface<?>> void abc(T a);
這是一個正確的方法是什麼?或者,也許我應該寫:
public <T extends MyInterface<T>> void abc(T a);
這兩個聲明有什麼區別?
考慮到我有以下接口:Java泛型 - 有什麼區別?
public interface MyInterface<T extends Number>
在另一類我要聲明這樣一個方法:
public <T extends MyInterface<?>> void abc(T a);
這是一個正確的方法是什麼?或者,也許我應該寫:
public <T extends MyInterface<T>> void abc(T a);
這兩個聲明有什麼區別?
一些接口旨在將實現類作爲泛型類型。
例如,Comparable
接口通常被實現爲:
class MyClass implements Comparable<MyClass>
因爲然後在Comparable
聲明的方法
int compareTo(T o);
可用於的MyClass
實例比較的另一個實例同班。
其他接口具有不同類型的泛型參數。例如,List<T>
,其中T
指示列表中包含的對象的類型。
如果你聲明的方法與:
public <T extends MyInterface<T>> void abc(T a);
那麼你說,類T
實現在類實現Comparable
接口方式的接口MyInterface
- 以自己爲泛型類型。根據MyInterface
的實際情況,這可能也可能不合適。
如果你聲明的方法與:
public <T extends MyInterface<?>> void abc(T a):
,那麼你不放置任何約束在T
的實施MyInterface
泛型類型。
另一種選擇是
public void abc(MyInterface<?> a);
這是編寫將接受MyInterface
任何實現的方法,最簡單的方法。
感謝您的解釋。現在我明白了不同之處 –
請告訴我們你想達到的目標,你的用例以及你想要的繼承模型,然後我們將能夠提供幫助。 – faizan
另外我不認爲第二個聲明是你想要的。如果T = MyClass,那麼聲明就變成了public>,這就是你的用例需要的嗎? –
faizan
我是第一次宣佈實現自己的目標,但我看到了第二個地方,我只是想知道他們之間的差異。感謝您的回覆 –