私はタイトルがちょっと混乱していると思うが、私はこれを言うより正確な方法を見つけることができない。
私はちょうど私が欲しいものを伝えるための簡単なコード例が必要です。Java(またはKotlin)で「自己クラス」を表現できますか?
私が持っている:
// 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; } }
しかし、実際には、このコードはあまりにも(差分:戻り値の型宣言を見てください):コンパイルされます私は、コード2は型エラーになりたい
// 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; } }
を。
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
これは可能ですか?
ない可能性が、Kotlinについて知らないことを行うことができます。 – Oleg
ああ、悪いニュースTAT @Oleg – ice1000
@ ice1000私はこのライブラリを使用しました。あなたが探しているものだと思います:https://github.com/h0tk3y/kotlin-monads;) –