让我说我有:
public class Animal{..}
和 public class Cat extends Animal {...}
public MakeNoise(Class<? extends Animal> animal1,
Class<? extends Animal> animal2){..}
Run Code Online (Sandbox Code Playgroud)
为什么不MakeNoise(new Animal(),new Animal())编译?
虽然MakeNoise(new Cat(),new Cat())编译.
有没有办法解决它而不添加动物接口,并做:
Class<? extends AnimalInterface>
Run Code Online (Sandbox Code Playgroud)
为什么不
MakeNoise(new Animal(),new Animal())编译?
因为new Animal()创建的实例Animal不是实例Class.实际上,当您处理Class<? extends Animal>实例时,Class它指的是该类的子类型.AnimalAnimal
你试图实现的是这样的:
public MakeNoise(Animal animal1, Animal animal2){..}
Run Code Online (Sandbox Code Playgroud)
或者假设这MakeNoise是一个类,您可以在下一个类定义上定义泛型:
public class MakeNoise<X extends Animal, Y extends Animal> {
public MakeNoise(X animal1, Y animal2){..}
}
Run Code Online (Sandbox Code Playgroud)
然后你就可以打电话了
MakeNoise makeNoise1 = new MakeNoise(new Cat(), new Cat());
MakeNoise makeNoise2 = new MakeNoise(new Animal(), new Animal());
Run Code Online (Sandbox Code Playgroud)
如果MakeNoise应该是一个方法(如果你的问题中有一个拼写错误,因为没有返回的类型),你也可以在方法定义中定义泛型类型,如下例所示:
<X extends Animal, Y extends Animal> void MakeNoise(X animal1, Y animal2) {...}
Run Code Online (Sandbox Code Playgroud)
虽然
MakeNoise(new Cat(),new Cat())编译.
由于前面描述的相同原因,这无法编译
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |