질문 제목이 약간 혼란 스럽다고 생각합니다. 그러나 이것을 말하는 더 정확한 방법을 찾을 수 없습니다.
내가 원하는 것을 말해주기 위해 간단한 코드 예제가 필요합니다.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; } }
그러나 실제로는,이 코드도 컴파일 (차이 : 리턴 타입 선언을보고) :
// 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(); }
그냥 하스켈의 typeclasses 같은 :
class Monad (m :: * -> *) where
-- here m is restricted to the subclass
(>>=) :: m a -> (a -> m b) -> m b
이 가능합니까?
하지 수는, 코 틀린에 대해 알고하지 않도록 할 수 있습니다. – Oleg
오, 아니요, 나쁜 소식 TAT @Oleg – ice1000
@ ice1000이 라이브러리를 사용했습니다. 내가 찾고있는 것 같습니다 : https://github.com/h0tk3y/kotlin-monads;) –