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; } }
但實際上,這段代碼編譯太(DIFF:看的返回類型聲明):
// 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
這可能嗎?
不可能在Java中,不知道科特林。 – Oleg
噢不,壞消息TAT @Oleg – ice1000
@ ice1000我已經使用過這個庫,我想這是你要找的:https://github.com/h0tk3y/kotlin-monads;) –