2014-01-16 50 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

相关问题