今天來看一道經典的編譯期錯誤題目,考察方法重載規則與泛型類型擦除的交互影響。
package Nov2016;
import java.util.List;
public class Ques1103 {
public void method01(String[] array) {}
public void method01(Integer[] array) {}
public void method02(List<String> list) {}
public void method02(List<Integer> list) {}
}
請問主程序能否正常編譯通過?
答案:無法編譯通過。
method01:參數類型為 String[] 與 Integer[],屬於不同的陣列類型,構成合法重載,編譯通過。method02:因泛型擦除,List<String> 和 List<Integer> 編譯後均擦除為原始類型 List,導致方法簽名相同,構成重複定義,編譯報錯:name clash: method02(List) and method02(List) have the same erasure。processStringList / processIntegerList)或引入標記介面/類。這道題目精準揭示了「泛型擦除」對重載機制的實際衝擊,是面試與日常開發中必須掌握的硬核知識點。