簡體   English   中英

通過List <>重載Java方法

[英]Overload java method by List<>

我有代碼,方法是用List<>參數覆蓋

RetrunType1 func(List<Type1> arg);
ReturnType2 func(List<Type2> arg);

和Type1!= Type2,但是該代碼可以在jdk1.6.0_45上編譯並正常工作。 我知道此示例無法編譯和運行。 我怎么能理解?

這是由於類型擦除引起的 泛型類型參數不會遵循字節碼,因此,如果您建議的重載是合法的,則最終會在字節碼中造成名稱沖突:

ReturnType1 func(List arg);
ReturnType2 func(List arg);

解決方案是為函數使用不同的名稱。

它之所以能夠在Java 6中運行,是因為Java 7中已修復了一個錯誤

這里的問題是所謂的類型擦除,您可以在此處閱讀。 然而,簡短的版本是Java編譯器將刪除通用參數,以使字節代碼與以前的Java版本兼容。 所以這兩種方法都有簽名

RetrunType1 func(List arg);
ReturnType2 func(List arg);

因此對於Java而言,這些功能看起來幾乎相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM