我無法理解與泛型相關的子類型/接口實現背後的概念。請解釋。 我有以下結構:泛型在泛型和實現類中的paraemeterised定義理由
`ICommand -> ProducerConsumerCommand`
IProducerConsumer -> SimpleProducerConsumer
我的理解是,實施IProducerConsumer任何具體的類必須持有類型T是數量和ICommand接口的子類的對象。
IProducerConsumer<T extends Number,ICommand>
現在我想寫一個實現類SimpleProducerConsumer,
現在,我的意圖是,我想告訴大家,SimpleProducerConsumer可以容納任何類型的參數,在IProducerConsumer類型參數,定義如下:
public class SimpleProducerConsumer<T,ICommand> implements Runnable,
IProducerConsumer<T,ICommand> {
忽略了最低的工作,它說如下:
SimpleProducerConsumer<T,ICommand> - ICommand complains (warning) that it is getting hidden.
IProducerConsumer<T,ICommand> - compiler errors in T saying as below
*約束不匹配:類型T不是類型IProducerConsumer<T,ICommand>*
的有界參數的有效替代品所以,我的第一個問題是,爲什麼我不能定義方式在具體的類接口相同。 引擎蓋下發生了什麼。
,如果我可以定義
public class test<ICommand> {}
我爲什麼不能做同樣的同時實施,令人目不暇接。
現在我定義如下
public class SimpleProducerConsumer<T,ProducerConsumerCommand> implements Runnable,
IProducerConsumer<T,ICommand> {
仍然噸IProducerConsumer抱怨。
如果我改變如下:
public class SimpleProducerConsumer<T,ProducerConsumerCommand> implements Runnable,
IProducerConsumer<T extends Number,ICommand> {
延伸抱怨說,除去令牌。
我現在這樣的,如下:
public class SimpleProducerConsumer<T extends Number,ProducerConsumerCommand> implements Runnable,
IProducerConsumer<T extends Number,ICommand> {
在IProducerConsumer這麼想的工作還延伸。
現在
public class SimpleProducerConsumer<T extends Number,ProducerConsumerCommand> implements Runnable,
IProducerConsumer<T,ICommand> {
是現在的編譯器是幸福的。現在我完全失去了,上面的東西是什麼意思。 SimpleProducerConsumer包含T類型的對象,它們是Number的子類,ProducerCommand對象是有意義的,但IProducerConsumer保存類型T的對象?這是什麼 ?
這是什麼原因。有人可以請expalin。
嗨巴爾德第一件事,是不是泛型類型參數或通用類型參數。因爲從下面的鏈接泛型類型參數是調用類型參數時發生的.http://docs.oracle.com/javase/tutorial/java/generics/types.html – Curious
好點 - 這是一個錯字。 'ICommand'實際上是一個類型參數聲明。我編輯了我的答案 – Balder
謝謝巴爾德現在我明白了。這意味着類型參數是一個聲明,它聲明它擁有某種類型的對象,但是由於ICommand是一種類型的接口,它根本不具有任何意義,所以就通用術語而言,我們必須指定它,因爲它可以容納任何對象一些具體類型或C類型,它擴展了作爲接口的類型參數。這說得通。謝謝。糾正我如果我的翻譯有缺陷。 – Curious