class User{
private int id;
private String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
}
class Service<T> {
private List<T> data;
public void setData(List<T> data) {
this.data = data;
}
}
public class ServiceTest {
public static void main(String[] args) {
Service<User> result=new Service<User>();
result.setData(Collections.emptyList()); // problem is here
}
}
如何使用类型参数传递空列表?
编译器给我错误信息:
Service类型中的方法setData(List&lt; User&gt;)不是 适用于参数(List&lt; Object&gt;)
如果我尝试使用List进行转换,那么错误:
无法从List&lt;对象&gt;列出&lt;用户&gt;
result.setData(new ArrayList<User>());
工作正常,但我不想传递它。
答案 0 :(得分:11)
Collections.emptyList()
是通用的,但您在原始版本中使用它。
您可以使用以下命令显式设置type-parameter:
result.setData(Collections.<User>emptyList());
答案 1 :(得分:6)
简单地
result.setData(Collections.<User>emptyList());
答案 2 :(得分:0)
您遇到的问题是即使是方法 emptyList()返回List,你没有提供类型,所以 它默认返回List。你可以提供这种类型 参数,并使您的代码按预期运行,如下所示:
result.setData(Collections.<User>emptyList());
现在,当你进行直接赋值时,编译器可以搞清楚 你的泛型类型参数。它被称为类型推断。对于 例如,如果你这样做:
List<User> emptyList = Collections.emptyList();
然后emptyList()调用将正确返回List。