为什么接口的泛型方法可以在Java中实现为非泛型?
2022-09-04 03:29:27
假设我们有一些测试接口/类,如下所示:
abstract class Plant {
public abstract String getName();
}
interface Eatable { }
class Apple extends Plant implements Eatable {
@Override
public String getName() {
return "Apple";
}
}
class Rose extends Plant {
@Override
public String getName() {
return "Rose";
}
}
interface Animal {
<T extends Plant & Eatable> void eat(T plant);
}
您可以看到是一个具有约束的泛型方法。现在我有我的班级是这样的:Animal.eat
Human
class Human implements Animal {
@Override
public void eat(Plant plant) {
}
}
编译良好。您可以看到比界面丢失的限制要少。Human.eat
Animal.eat
Eatable
问题 1:为什么编译器不抱怨这种不一致?
问题 2:如果降级为编译器可以接受,为什么它会抱怨 ?Plant&Eatable
Plant
eat(Object plant)