1

質問のタイトルは少しわかりにくいと思いますが、これ以上正確な言い方が見つかりません。
私が欲しいものを伝えるために、簡単なコード例が必要です。

私は持っている:

// code 1
interface A { A bla(); }
class B implements A { @Override public B bla() { return this; } }
class C implements A { @Override public C bla() { return this; } }

しかし、実際には、このコードもコンパイルされます (差分: 戻り値の型宣言を見てください)。

// code 2
interface A { A bla(); }
class B implements A { @Override public A bla() { return this; } }
class C implements A { @Override public A bla() { return this; } }

コード 2 を型エラーにしたい。たとえば、すべての 'サブクラス'メソッドが . の代わりに自分自身を返すよう
に強制したいとします。AblaA

私が望むものを表す偽のコードが存在する可能性があると思います:

interface A { this.Type bla(); }

Haskell の型クラスのように:

class Monad (m :: * -> *) where
  -- here m is restricted to the subclass
  (>>=) :: m a -> (a -> m b) -> m b

これは可能ですか?

4

1 に答える 1