問題與
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);
https://docs.oracle.com/javase/tutorial/java/generics/index.html – Andrew
而你做了什麼以前的研究?你知道,就像閱讀甲骨文關於泛型的優秀教程,很好地回答你所有的問題...... – GhostCat