泛型,方法签名,赋值

泛型,方法签名,赋值,第1张

泛型,方法签名,赋值

泛型类

TypeA<TypeB>
与的类型不同
TypeA
。您不能在
TypeA<TypeB>
方法需要使用的地方传递类型的参数
TypeA
。也是
TypeA<TypeB>
不同于的类型
TypeA<TypeC>
,因此适用相同的约束。

经典示例(来自有效Java,第二版
AFAIR)是:我们具有用于动物(

Container<Animal>
)的容器,并作为
Animal
具有
Lion
和的子类
Butterfly
。现在,如果您有方法

void func(Animal animal);

它会接受狮子和蝴蝶。但是,此功能

void func(Container<Animal> animalContainer);

不会接受

Container<Lion>
,也不会接受
Container<Butterfly>
。一定要意识到,用于保护狮子安全的坚固笼子不会阻止蝴蝶飞走,反之亦然,用厚而轻的网圈支撑蝴蝶不会对付狮子。

如果您真的确定有任何一种动物容器适合您,请声明您的函数,如下所示:

void func(Container<? extends Animal> animalContainer);

回到你的情况,我想唯一的方法,同时接受

List<TypeA>
List<TypeA<TypeB>>
会是这样的:

void doSomething(List<?> list);


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5615724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存