私はジェネリックについて多くのことを読んできましたが、Java で単純な階層を実装する際にいくつかの基本的な問題が残っています。目標は、同じクラスの 2 つのオブジェクトを比較する抽象メソッドを定義することです。オブジェクトが異なるクラスのものである場合は、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 のチェック メソッドをオーバーライドしていないためです。何が欠けている可能性があるかについての手がかりはありますか?