2010-07-20 59 views
3

我有很多Java 1.4代碼,我正在遷移到Java 5的過程中。我想修復關於在參數化類中使用原始類型的所有編譯器警告,並且不知道是否有一個工具,可以自動變換類似:自動更新代碼到Java 5

List myList = new ArrayList(); 
myList.add("foo"); 
String foo = (String) myList.get(0); 

到:

List<String> myList = new ArrayList<String>(); 
myList.add("foo"); 
String foo = myList.get(0); 

據我所知,泛型是相當複雜的,因此不要指望這樣的工具將能夠在所有情況下選擇最正確的參數化類型。不過,只要它能處理簡單的情況(如上述),並且不會破壞我的代碼,我會很滿意。

同樣,我想改變所有的舊斯庫爾循環,在Java 5中引入了簡化的for循環

請問這樣的工具存在?

+0

聽起來像是重構我的時間 – monksy 2010-07-20 16:19:25

回答

7

我會使用Eclipse來做到這一點。

選擇您需要升級包結構,然後右鍵單擊 - >重構 - >推斷泛型類型參數

恕我直言,這是您所需要的一個起點。

+0

你也可以打開Eclipse的警告泛型,所以你可以很容易地看到這種重構可能發生的地方。 – dplass 2010-07-20 16:21:01

-2

我認爲最安全的做法是爲您的方法提供@SuppressWarnings(「rawtypes」)註釋。由於你的代碼已經被測試在1.4中工作(我假設)並且以這種方式插入通用類似語法會導致一些令人討厭的錯誤出現。 您可以使用其他values來抑制威脅。

還可以將此註釋添加到類

@SuppressWarnings("rawtypes") 
public class MyClass {} 

雖然我想不出一個工具來做到這一點的。

至於for循環,在編寫新代碼時使用新的「for」循環很有意義。因爲它更容易。爲什麼要改變舊式的循環?來吧,它沒有那麼糟糕的語法,當然也不是很難理解:)

+1

關於抑制警告的「安全」是什麼? – perp 2010-07-20 16:14:37

+0

骯髒的錯誤怎麼會出現?它不應該影響字節碼,所以除了在添加泛型的時候不小心將代碼搞亂了自動完成之外,我無法真正想到如何通過添加泛型來嵌入錯誤。如果你做錯了什麼,這將是編譯時錯誤,所以你會注意到它(這就是它的全部)。 – 2010-07-20 16:19:34

+0

我的直覺是,通過添加泛型,只要你非常小心並且有很多單元測試(並且可能寫的更多),就更有可能發現一個bug,而不是創建一個。 – MatrixFrog 2010-07-20 16:21:26