gpt4 book ai didi

java - Java 中的泛型子类型化问题

转载 作者:行者123 更新时间:2023-11-29 09:35:07 25 4
gpt4 key购买 nike

我正在尝试学习 Java 中的子类型化,但我在泛型方面不是一个更好的人,所以我遇到了这个问题或疑问-

import java.util.ArrayList;
import java.util.Collection;

interface Animal<T>{}
class Lion implements Animal<Lion>{}
class Butterfly implements Animal<Butterfly>{}
class Cage<T>{
public <T> void addAnimal(T t){

}
}

interface CageAnimal<E> extends Collection<E>{}
public class SubType<T> {

public <T> SubType() {
Lion lion = new Lion();
Butterfly butterfly = new Butterfly();
/**
* **Here inside Lion cage, we added Butterfly : WRONG**
*/
Cage<Lion> cageLion = new Cage<Lion>();
cageLion.addAnimal(lion);
cageLion.addAnimal(butterfly);


CageAnimal<Lion> cageAnimalLion = (CageAnimal<Lion>) new ArrayList<Lion>();
cageAnimalLion.add(lion);

//cageAnimalLion.add(butterfly);//Butterfly is Not Supposed to add here as it is the cage of Lion
}
}

在上面的示例中,当我声明 Cage 时,为什么我能够添加 Butterfly 而在相同的情况下,当我创建 CageAnimal 类型时,我无法添加任何 Buttefly

Cage<Lion> cageLion = new Cage<Lion>();
cageLion.addAnimal(lion);
cageLion.addAnimal(butterfly);

如果是 Cage

Cage<Animal> cageAnimalLion = new Cage<Lion>();
cageAnimalLion.addAnimal(lion);
cageAnimalLion.addAnimal(butterfly); //Throwing Compile Error

最佳答案

这一行

 public <T> void addAnimal(T t){

应该是

 public void addAnimal(T t){

关于java - Java 中的泛型子类型化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9957713/

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