假设我有: 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>
为什么不
MakeNoise(new Animal(),new Animal())
编译?
因为new Animal()
创建的实例Animal
不是的实例Class
。实际上,当您处理Class<? extends Animal>
的实例时Class
,所指的实例是该类的子类型。Animal
Animal
您尝试达到的目标是:
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] 删除。
我来说两句