虛擬機器並不支援這些文法,
Map<int,String> map = new HashMap<int,String>();map.put(1,"No.1");map.put(2,"No.2");System.out.println(map.get(1));System.out.println(map.get(2));
Map map = new HashMap();map.put(1,"No.1");map.put(2,"No.2");System.out.println((String)map.get(1));System.out.println((String)map.get(2));
import java.util.List;public class FanxingTest{public void method(List<String> list){System.out.println("List String");}public void method(List<Integer> list){System.out.println("List Int");}}
當我用
這是因為泛型
把以上代碼修改如下:
import java.util.List;public class FanxingTest{public int method(List<String> list){System.out.println("List String");return 1;}public boolean method(List<Integer> list){System.out.println("List Int");return true;}}
發現這時編譯可以通過了(語言中和沒有關聯,二者屬於不同的類型,不能相互轉換,不存在語言中整數值非零即真的情況)。兩個不同類型的返回值的加入,使得方法的重載成功了。這是為什麼呢?
我們知道,因此方法的返回值並不參與重載方法的選擇,這樣看來為重載方法加入返回值貌似是多餘的。對於重載方法的選擇來說,這確實是多餘的,但我們現在要解決的問題是讓上述代碼能通過編譯,讓兩個重載方法能夠合理地共存於同一個為兩個重載方法加入不同的返回值後,因為有了不同的位元組碼特徵簽名,它們便可以共存於一個
自動拆裝箱、變長參數等文法糖也都是在編譯階段就把它們該文法糖結構還原為了原生的文法結構,因此在檔案中也只存在其對應的原生類型,這裡不再一一說明。