Java 如何传递带有类型参数的空列表? 类用户{ 私有int-id; 私有字符串名称; 公共用户(int-id,字符串名称){ this.id=id; this.name=名称; } } 班级服务{ 私人名单数据; 公共无效设置数据(列表数据){ 这个数据=数据; } } 公共类服务测试{ 公共静态void main(字符串[]args){ 服务结果=新服务(); result.setData(Collections.emptyList());//问题就在这里 } }
如何传递带有类型参数的空列表 编译器给我错误消息: 类型服务中的方法setData(列表<用户>)不可用 适用于参数(列表<对象>) 如果我尝试使用列表强制转换,则错误: 无法从列表<对象>强制转换到列表<用户>Java 如何传递带有类型参数的空列表? 类用户{ 私有int-id; 私有字符串名称; 公共用户(int-id,字符串名称){ this.id=id; this.name=名称; } } 班级服务{ 私人名单数据; 公共无效设置数据(列表数据){ 这个数据=数据; } } 公共类服务测试{ 公共静态void main(字符串[]args){ 服务结果=新服务(); result.setData(Collections.emptyList());//问题就在这里 } },java,list,generics,collections,Java,List,Generics,Collections,如何传递带有类型参数的空列表 编译器给我错误消息: 类型服务中的方法setData(列表)不可用 适用于参数(列表) 如果我尝试使用列表强制转换,则错误: 无法从列表强制转换到列表 result.setData(新的ArrayList())工作正常,但我不想通过。很简单 result.setData(Collections.emptyList())是通用的,但您正在原始版本中使用它 可以使用以下命令显式设置类型参数: class User{ private int id; pri
result.setData(新的ArrayList())
工作正常,但我不想通过。很简单
result.setData(Collections.emptyList())代码>是通用的,但您正在原始版本中使用它
可以使用以下命令显式设置类型参数:
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
}
}
result.setData(Collections.emptyList());
您遇到的问题是,即使
emptyList()返回列表,但您尚未为其提供类型,因此
默认为返回列表。你可以提供这个型号
参数,并使您的代码按预期运行,如下所示:
result.setData(Collections.emptyList());
现在,当您进行直接赋值时,编译器可以
为您创建泛型类型参数。这叫做类型推断。对于
例如,如果您这样做:
List-emptyList=Collections.emptyList();
然后,emptyList()调用将正确返回一个列表
result.setData(Collections.<User>emptyList());
result.setData(Collections.<User>emptyList());
List<User> emptyList = Collections.emptyList();