次の抽象クラスがあります。
public abstract class AbstractSharpCollection<T> implements SharpCollection<T>
とインターフェース
public interface SharpCollection<T> extends Iterable<T>
{
SharpCollection<T> tail();
}
別の SharpCollection を返す SharpCollection には、他にも多くのメソッドが定義されています。これらすべてのメソッドのロジックは、反復子のみに依存しています。
tail() の呼び出しがスーパークラスではなくサブクラスのインスタンスを返すように、AbstractSharpCollection でメソッドを作成できるようにしたいと考えています。
何かのようなもの
public <V extends SharpCollection<T>> V tail() { //code logic here }
AbstractSharpCollection を拡張するサブクラスで戻り値の型をオーバーライドできることはわかっていますが、戻り値の型を変更するためだけにすべてのメソッドをオーバーライドしなければならないのは、非常に見苦しく、面倒で、エラーが発生しやすくなります。
私が望むものを達成できる方法はありますか?
助けてくれてありがとう。