方法参数为List的varargs

时间:2014-01-16 20:43:28

标签: list variadic-functions

我已经在方法定义

中为列表定义了一个vararg
List<String>... valuesList

例如,下面的方法是创建一个带有'where子句'条件的sql查询作为用户的输入。

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

定义像这样的API方法是一个好习惯吗?我问的原因是因为编译器抛出警告,“类型安全:为varargs参数创建了List的通用数组”。

请提供您的意见和建议。

1 个答案:

答案 0 :(得分:1)

克里西卡,

首先,问题取决于使用的版本,并将在未来版本中再次更改。

恕我直言,这不是关于“良好做法”的问题,而是varargs的“漏洞”。因为,varargs(如你所知)是一个数组而Java不允许创建参数化类型的数组,编译器将varargs形式参数转换为Object[](List []而不是List []在给定的情况下)元素失去了“真实的类型”。

然后,注意到这个问题,在完成write API 时仅将varargs用于基本类型。 但是,Java知道这个问题:另请参阅java 7上的专用注释@SafeVarargs

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

如果java“承认”,这种方式应该可以接受。

最后,请参阅official documentation