2009-07-23 56 views
1

在許多書中說,之所以其Java的泛型使用擦除是 有遺留代碼的兼容性。泛型擦除和遺留代碼

好,很好,但任何人都可以給我一些簡單的例子,其中一些 通用的代碼與舊的遺留代碼,反之亦然互動?

回答

3

這裏有沒有類型擦除這是不可能的例子:在當前JRE和List喜歡的用途

public static void main(String[] args) { 
    List<String> newList = legacyMethod(); 

    for (String s : newList) { 
     System.out.println(s); 
    } 
} 

public static List legacyMethod() { 
    List oldList = new ArrayList(); 
    oldList.add("a"); 
    oldList.add("b"); 
    oldList.add("c"); 
    return oldList; 
} 
+0

這不是一個很好的例子,在舊的和新的方法相同。 – 2009-07-23 11:41:13

3

有與舊代碼的兼容性意味着它應該能夠不用編譯JVM上的新版本上運行。假設您有一些沒有源代碼的遺留庫。這確保您可以在Java 5上運行它。您的新代碼將能夠毫無問題地調用遺留代碼。

1

運行舊代碼將使用新老代碼。方法吸如Collections.sort將是新回調的舊代碼。

0

採取哪些還沒有被移植到Java 5的任何舊的Java庫,但。您會發現很多舊代碼返回或接受的地方List。如果不刪除,你不能使用泛型的代碼(讓你的生活更簡單),並通過您的列表作爲參數傳遞給框架無(淺)複製了整個事情 - ListList<String>會爲StringFile不同。

以類似的方式,當庫返回一個列表,你要麼必須使用預5語法與迭代器來處理它或複製的基本清單到泛型一個。

有辦法解決這個問題。 Sun可能已經使List等於List<Object>或者上帝保佑List<?>。但那會引入更加微妙的問題。所以他們決定採取阻力最小的方式,並在編譯過程中使用通用信息(主要是)。