2017-12-18 4 views
1

私はタイトルがちょっと混乱していると思うが、私はこれを言うより正確な方法を見つけることができない。
私はちょうど私が欲しいものを伝えるための簡単なコード例が必要です。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 

これは可能ですか?

+0

ない可能性が、Kotlinについて知らないことを行うことができます。 – Oleg

+0

ああ、悪いニュースTAT @Oleg – ice1000

+0

@ ice1000私はこのライブラリを使用しました。あなたが探しているものだと思います:https://github.com/h0tk3y/kotlin-monads;) –

答えて

3

ことは不可能であるが、しかし、あなたはJavaで

interface A<T extends A> { T bla();} 
class B implements A<B> { @Override public B bla() { return this; } } 
class C implements A<C> { @Override public C bla() { return this; } } 
+0

ああ、多くのありがとう! prpr – ice1000

関連する問題