Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有可能超级播放列表?_Java_List_Casting - Fatal编程技术网

Java 是否有可能超级播放列表?

Java 是否有可能超级播放列表?,java,list,casting,Java,List,Casting,这听起来可能有点琐碎,但我真的无法找到问题的症结所在 List<Dog> dogs = getListOfDogs(); List<Cat> cats = getListOfCats(); feed(dogs); feed(cats); public void feed(List<Animal> animals) { // feed the animal: // depending on the type of animal, I migh

这听起来可能有点琐碎,但我真的无法找到问题的症结所在

List<Dog> dogs = getListOfDogs();
List<Cat> cats = getListOfCats();

feed(dogs);
feed(cats);

public void feed(List<Animal> animals) {
    // feed the animal:
    // depending on the type of animal, I might want to give it
    // different kind of food.
}

class Dog implements Animal { /**/ }
class Cat implements Animal { /**/ }
interface Animal { /**/ }
List dogs=getListOfDogs();
列表猫=getListOfCats();
喂(狗);
喂(猫);
公共饲料(列出动物){
//给动物喂食:
//根据动物的类型,我可能会给它
//不同种类的食物。
}
类Dog实现动物{/**/}
类Cat实现动物{/**/}
界面动物{/**/}
我所处的环境与上面描述的非常相似。 我们还假设
getListOfDogs
getListOfCats
是固定的,无法在这方面采取行动

当然,这样说是非法代码:
feed
只接受
List
类型,而我只能拥有
List
List

由于
喂食
对于这两种动物来说是一个几乎相同的功能,除了食物的种类(我可以通过
instanceof
来管理它),我希望避免复制它,只是更改签名


有没有办法超级播放这两张名单?类似这样的内容(这显然是错误的):
feed((List)getListOfDogs())

您要查找的是:

public void feed(List<? extends Animal> animals) {

public void提要(List如果它不允许您直接强制转换到
List
,那么您可以在不使用泛型参数的情况下强制转换到
List
,然后再转换到
List
,但这不是一个好方法

这不是一个好方法,因为一旦更改了通用参数,就可以将猫放入狗的列表中

相反,feed函数的参数应该看起来不同

public void feed(List<? extends Animal> animals) {
    // feed the animal:
}
public-void-feed(List你可以做你说过你想做的事,通过如下声明
feed

public void feed(List<? extends Animal> animals)
…然后

public void feed(List<Dog> animals) {
    this.feed(animals, this.dogFood);
}
public void feed(列出动物){
喂(动物,狗食);
}

public void feed(列出动物){
这个。饲料(动物,这个。猫粮);
}

…或类似内容。

feed
应该接受
列表如果您没有看到它,这里有关于泛型和集合的有用讨论
public void feed(List<Dog> animals) {
    this.feed(animals, this.dogFood);
}
public void feed(List<Cat> animals) {
    this.feed(animals, this.catFood);
}