本示例摘自Thinking in Java。泛型:如何使編譯器控制我將哪些類型放入構造函數
public class Automobile {
}
public class Holder<T> {
private T a;
public Holder(T a){
this.a = a;
}
public void set(T a){
this.a = a;
}
public T get(){
return a;
}
public static void main(String[] args){
Holder<Automobile> h = new Holder<Automobile>(new Automobile());
Automobile a = (Automobile)h.get();
}
}
然後進行解釋:您必須使用與main()中相同的尖括號語法來指定要放入其中的類型。
嗯,我什麼都不懂。我會理解,在違反此規則的情況下,必須將其視爲可能的編譯時錯誤。
但這個工程:
Holder<Automobile> h = new Holder(new Automobile());
Automobile a = h.get();
而且這個工程:
Holder h = new Holder(new Automobile());
Automobile a = (Automobile)h.get();
所以,我可以看到,編譯器將無法控制我放進Holder對象。那麼,我根本就沒有注意到泛型。我有兩個問題:
使用它們的原因是什麼?只有在將物體鑄造回汽車時節省我一些努力?
有什麼辦法讓編譯器控制我,讓我真的把汽車放入持有人嗎?
看看原始類型。 –
我添加了兩條評論,java 1.7,並修復了第三個代碼片段中的錯誤,請在編輯 – EpicPandaForce