java方法检索

时间:2011-12-13 12:36:33

标签: java variadic-functions

我需要将集合发送到此方法:

public boolean[] save(T... entities) {
    return _saveOrUpdateIsNew(entities);
}

我尝试传递集合:

List<Client> clientsToUpdate = new ArrayList<Client>();
save(clientsToUpdate );

但是我收到编译错误,该方法类型不适用于List<Client>

编辑:

我添加了这一行:

clientsToUpdate.toArray(new Client[0]);

我有这个编译错误:

The method save(Client...) in the type BaseDAO<Client,Integer> is not applicable for the arguments (Client[])

3 个答案:

答案 0 :(得分:4)

您提到的方法是使用varargs,这意味着它接受单个Client实例或Client个对象数组。您应该将List转换为这样的数组:

List<Client> clientsToUpdate = new ArrayList<Client>();
Client[] clients = clientsToUpdate.toArray(new Client[0]);
save(clients);

除非项目中有多个Client类,否则这应该有效。

答案 1 :(得分:1)

T ..不是一个集合,它是一个数组。所以,你必须转换它。也许是这样的:

for(Object o: T)
    myCollection.add(o);

编辑:

对不起,我想你想要不同的方式。如果要将Collection传递给方法,请将其转换为数组:

Object[] array = myCollection.toArray();

答案 2 :(得分:1)

你不能将任何Collection传递给vararg方法(除非方法签名是(Collection ...),但这几乎肯定不是你想要的)。尝试使用Array。