2014-01-16 47 views
1
的可變參數

我已經定義爲列表如以下方法定義一個可變參數,方法參數作爲列表

List<String>... valuesList 

例如,下面的方法是創建與「where子句」條件的SQL查詢作爲輸入由用戶。

getRecords(List<String> dbColumnList,List<String>... valuesList) 

定義這樣的API方法是否是一種好的做法?我之所以問這個問題,是因爲編譯器會引發一個警告,「類型安全:爲可變參數參數創建一個List的通用數組」。

請提供您的意見和建議。

+0

「類型安全性:爲可變參數參數創建一個List的通用數組」爲什麼?你確定?你正在使用哪個java版本? – venergiac

+0

我正在使用java 1.6 –

回答

1

克里西卡,

首先把問題從使用的版本依賴,並會在未來的版本中再次發生變化。

恕我直言,它不是一個關於「良好做法」的問題,它是可變參數的「漏洞」。由於可變參數(如你所知)是一個數組,並且Java不允許創建參數化類型的數組,因此編譯器會將可變參數形式參數轉換爲Object[](List []而不是特定情況下的List [ 「真實類型」。

然後,注意到這個問題後,當您完成寫入API時,僅對原始類型使用可變參數。 然而,爪哇知道這個問題:又見關於Java 7 @SafeVarargs

http://docs.oracle.com/javase/7/docs/api/java/lang/SafeVarargs.html

如果java的 「承認它」,這樣應該可以接受專門的註釋。

最後請參閱official documentation

+0

是的......請參閱我編輯的問題。我認爲對API用戶定義會更容易。但我正在重新考慮是否公開地圖而不是此方法 –

+1

「編譯器將可變參數參數到對象[]「不正確。這裏是'List []' – newacct

+0

對不起,列表[]而不是列表 []在這種情況下,但問題是相同的 – venergiac

相關問題