我有這樣的代碼,它不能通過編譯:爲什麼當一個類變得通用時,「不兼容類型」編譯錯誤會變成警告?
import java.util.ArrayList;
import java.util.List;
public class TypeSafetyTest {
public static void main(String[] args) {
TypeSafetyTest test = new TypeSafetyTest();
test.run();
}
private void run() {
Car car = new Car();
List<String> wheelWeights = car.getWheelWeights();
}
private class Car {
List<Double> wheelWeights = new ArrayList<Double>();
public List<Double> getWheelWeights() {
return wheelWeights;
}
public void setWheelWeights(List<Double> wheelWeights) {
this.wheelWeights = wheelWeights;
}
}
}
它給上線的 「不兼容類型的」 錯誤:
List<String> wheelWeights = car.getWheelWeights();
不過,如果我更改行:
private class Car {
至
private class Car<T> {
然後代碼編譯成功,並在過去有編譯錯誤的行上發出警告「Unchecked assignment」。這是爲什麼?我期待在這兩種情況下都會出現編譯錯誤。
試圖瞭解Java泛型只會導致瘋狂。我一直在瀏覽Java語言規範,但我仍然無法弄清這個問題的答案。 – Antimony
不重複,但密切相關:[什麼是原始類型,爲什麼我們不應該使用它?](http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and- why-shouldnt-we-use-it)基本上,一旦你使用原始類型聲明你的類,你已經明確地選擇了整個類的所有泛型。 –