我已经阅读了很多关于泛型的内容,但在 Java 中实现简单的层次结构时仍然存在一些基本问题。目标是定义一个抽象方法来比较同一类的两个对象,如果对象来自不同的类,它应该返回 false。例子:
我们定义抽象类 Sound
abstract class Sound{
public boolean check(Sound d){return false;};
}
一些扩展 Sound 的类和从它扩展的另一个抽象类,例如 Alarm
abstract class Alarm extends Sound{
@Override
public boolean check(Alarm d){//Do something and return boolean};
}
还有一些从它延伸出来的类。
简单的解决方案是将方法定义为如图所示,它会起作用,但我觉得有更好的方法来强制执行层次结构,因此 Sound 类定义该方法只能与同一类的参数一起使用。
我对泛型的尝试:
abstract class Sound{
public <T extends Sound> boolean check(T d){return false;};
}
abstract class Alarm extends Sound{
@Override
public <T extends Alarm> boolean check(T d){//Do something and return boolean};
}
或者
abstract class Alarm extends Sound{
@Override
public boolean check(Alarm d){//check and return boolean};
}
Java 抱怨是因为对编译器我没有覆盖 Alarm 中的 check 方法。关于可能缺少什么的任何线索?