gpt4 book ai didi

java - 如何在 Java 中使用泛型转换列表?

转载 作者:IT老高 更新时间:2023-10-28 21:17:20 26 4
gpt4 key购买 nike

请考虑以下代码段:

public interface MyInterface {

public int getId();
}

public class MyPojo implements MyInterface {

private int id;

public MyPojo(int id) {
this.id = id;
}

public int getId() {
return id;
}

}

public ArrayList<MyInterface> getMyInterfaces() {

ArrayList<MyPojo> myPojos = new ArrayList<MyPojo>(0);
myPojos.add(new MyPojo(0));
myPojos.add(new MyPojo(1));

return (ArrayList<MyInterface>) myPojos;
}

return 语句进行了无法编译的强制转换。如何将 myPojos 列表转换为更通用的列表,无需遍历列表中的每个项目

谢谢

最佳答案

更改您的方法以使用通配符:

public ArrayList<? extends MyInterface> getMyInterfaces() {    
ArrayList<MyPojo> myPojos = new ArrayList<MyPojo>(0);
myPojos.add(new MyPojo(0));
myPojos.add(new MyPojo(1));

return myPojos;
}

这将阻止调用者尝试将接口(interface)的其他实现添加到列表中。或者,您可以只写:

public ArrayList<MyInterface> getMyInterfaces() {
// Note the change here
ArrayList<MyInterface> myPojos = new ArrayList<MyInterface>(0);
myPojos.add(new MyPojo(0));
myPojos.add(new MyPojo(1));

return myPojos;
}

正如评论中所讨论的:

  • 返回通配符集合对调用者来说可能很尴尬
  • 通常最好使用接口(interface)而不是返回类型的具体类型。所以建议的签名可能是以下之一:

    public List<MyInterface> getMyInterfaces()
    public Collection<MyInterface> getMyInterfaces()
    public Iterable<MyInterface> getMyInterfaces()

关于java - 如何在 Java 中使用泛型转换列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/662508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com