2015-07-03 40 views
-1

說,我有一個類Alpha,其中有兩個形式參數K and Vjava中參數化和原始類型實例化之間的區別

現在,我想用具體類型CK and CV初始化它的一個對象。

我想知道,什麼是

Alpha<CK, CV> alpha = new Alpha<CK, CV>(); 

之間的差異,

Alpha<CK, CV> alpha = new Alpha(); 

因爲,既不會讓我寫或讀比他們被聲明爲其他任何東西。而且,因爲泛型只是爲了確保編譯期間的類型安全,爲什麼它會拋出警告,如果我不能做任何問題呢?

+0

https://docs.oracle.com/javase/tutorial/java/generics/index.html – Andrew

+0

而你做了什麼以前的研究?你知道,就像閱讀甲骨文關於泛型的優秀教程,很好地回答你所有的問題...... – GhostCat

回答

1

問題與

Alpha<CK, CV> alpha = new Alpha(); 

是在左側,您使用的是通用型α-其中右側您使用的是原始類型的Alpha。 Java中的原始類型實際上只存在與預泛型代碼的兼容性,除非您絕對必須,否則絕不應在新代碼中使用。

就您最初的Alpha<CK, CV> alpha = new Alpha()示例而言,編譯器會爲該分配生成警告,因爲它必須。考慮這個:

List<String> strings = ... // some list that contains some strings 

// Totally legal since you used the raw type and lost all type checking! 
List<Integer> integers = new LinkedList(strings); 

泛型存在提供編譯時防止做錯事。在上面的例子中,使用原始類型意味着你沒有得到這種保護,並會在運行時得到一個錯誤。這就是爲什麼你不應該使用原始類型。

// Not legal since the right side is actually generic! 
List<Integer> integers = new LinkedList<>(strings); 
+0

是的。我知道 :)。我想知道的是,有人用這種方式聲明會有什麼不好,這在​​聲明和實例化參數化類型時是不可能的?謝謝。 –

+0

@PkeakhJoqo我編輯:) –

+0

謝謝:)。那麼,如果構造函數沒有參數,是否有任何問題可以考慮? –

相關問題