質問のタイトルは少しわかりにくいと思いますが、これ以上正確な言い方が見つかりません。
私が欲しいものを伝えるために、簡単なコード例が必要です。
私は持っている:
// 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 を型エラーにしたい。たとえば、すべての 'サブクラス'メソッドが . の代わりに自分自身を返すよう
に強制したいとします。A
bla
A
私が望むものを表す偽のコードが存在する可能性があると思います:
interface A { this.Type bla(); }
Haskell の型クラスのように:
class Monad (m :: * -> *) where
-- here m is restricted to the subclass
(>>=) :: m a -> (a -> m b) -> m b
これは可能ですか?