Java 如何传递带有类型参数的空列表? 类用户{ 私有int-id; 私有字符串名称; 公共用户(int-id,字符串名称){ this.id=id; this.name=名称; } } 班级服务{ 私人名单数据; 公共无效设置数据(列表数据){ 这个数据=数据; } } 公共类服务测试{ 公共静态void main(字符串[]args){ 服务结果=新服务(); result.setData(Collections.emptyList());//问题就在这里 } }

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

如何传递带有类型参数的空列表

编译器给我错误消息:

类型服务中的方法setData(列表<用户>)不可用 适用于参数(列表<对象>)

如果我尝试使用列表强制转换,则错误:

无法从列表<对象>强制转换到列表<用户>

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();