Java泛型扩展

八鹿

假设我有: public class Animal{..}

public class Cat extends Animal {...}

public MakeNoise(Class<? extends Animal> animal1,
                 Class<? extends Animal> animal2){..}

为什么不MakeNoise(new Animal(),new Animal())编译?

虽然MakeNoise(new Cat(),new Cat())可以编译。

有没有解决方法,而无需向动物添加界面并执行以下操作:

Class<? extends AnimalInterface>
尼古拉斯·菲洛托(Nicolas Filotto)

为什么不MakeNoise(new Animal(),new Animal())编译?

因为new Animal()创建的实例Animal不是的实例Class实际上当您处理Class<? extends Animal>的实例时Class所指的实例是该类的子类型AnimalAnimal

您尝试达到的目标是:

public MakeNoise(Animal animal1, Animal animal2){..}

或者假设这MakeNoise是一个类,则可以在类定义中定义泛型,如下所示:

public class MakeNoise<X extends Animal, Y extends Animal> {
    public MakeNoise(X animal1, Y animal2){..}   
}

这样您就可以打电话了

MakeNoise makeNoise1 = new MakeNoise(new Cat(), new Cat());
MakeNoise makeNoise2 = new MakeNoise(new Animal(), new Animal());

如果MakeNoise应该是一种方法(如果这样,则您的问题中有一个错别字,因为没有返回的类型),您还可以在方法定义中定义泛型,如以下示例所示:

<X extends Animal, Y extends Animal> void MakeNoise(X animal1, Y animal2) {...}

虽然MakeNoise(new Cat(),new Cat())可以编译。

由于先前描述的相同原因,无法编译

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java泛型扩展

来自分类Dev

Java泛型扩展

来自分类Dev

Java泛型扩展语法

来自分类Dev

扩展并扩展了Java中泛型的组合

来自分类Dev

Java泛型中的边界扩展通配符

来自分类Dev

java泛型T扩展了Simpletype吗?

来自分类Dev

Java:使用泛型扩展类

来自分类Dev

Java中的泛型,扩展接口

来自分类Dev

Java泛型中的边界扩展通配符

来自分类Dev

在java中扩展多个类的泛型

来自分类Dev

Java 泛型:如何扩展另一个泛型类的泛型类

来自分类Dev

Java泛型:<B扩展BaseB>与<?不匹配 扩展BaseB>

来自分类Dev

Java泛型-使用泛型函数扩展泛型类

来自分类Dev

泛型与扩展方法

来自分类Dev

如何正确创建在Java中扩展泛型接口的有界泛型类

来自分类Dev

Java集合泛型<?扩展Employee>抛出异常

来自分类Dev

Java泛型:方法声明参数中的类型扩展

来自分类Dev

Java泛型E扩展Comparable <E>留下警告

来自分类Dev

扩展或为父类的Java泛型类型

来自分类Dev

Java集合泛型<?扩展Employee>抛出异常

来自分类Dev

<E的可实例化Java泛型扩展了Comparable <E >>

来自分类Dev

带有扩展名的泛型的正确Java语法

来自分类Dev

Java 泛型:无法将 <X> 转换为 <? 扩展 X>

来自分类Dev

泛型扩展和实现

来自分类Dev

在Swift中扩展泛型?

来自分类Dev

泛型类型的扩展方法

来自分类Dev

泛型类型与扩展方法

来自分类Dev

泛型数组的快速扩展

来自分类Dev

泛型方法 T 扩展