我已经在方法定义
中为列表定义了一个varargList<String>... valuesList
例如,下面的方法是创建一个带有'where子句'条件的sql查询作为用户的输入。
getRecords(List<String> dbColumnList,List<String>... valuesList)
定义像这样的API方法是一个好习惯吗?我问的原因是因为编译器抛出警告,“类型安全:为varargs参数创建了List的通用数组”。
请提供您的意见和建议。
答案 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。