Может ли Kotlin разрешить функцию, возвращающую значение типа реализации этого интерфейса?

Я хочу написать что-то вроде этого:

/** * Represents a state, large or small. */ interface State { /** * */ val changeValue: StateChange<This> // does not compile; "This" is a keyword I made up that might reference the implementing class } /** * Represents a change in a state, large or small. * * @param StateType The type of state that has changed */ interface StateChange<StateType: State> 

Однако, как отмечено в моем комментарии, я не знаю синтаксиса для этого. Это в силе? Или я должен использовать обходные пути, как заставить государство взять себя в качестве общего параметра?


Если это не очевидно, я не могу использовать val changeValue: StateChange<State> потому что тогда это делает возможным, и я не хочу этого:

 // BAD EXAMPLE - This is what I want to avoid class Foo: State { val changeValue: StateChange<Bar> = Bar().changeValue } class Bar: State { val changeValue: StateChange<Foo> = Foo().changeValue } 

Вы можете использовать класс с рекурсивной верхней границей для этого:

 interface State<T : State<T>> { val changeValue: StateChange<T> } interface StateChange<StateType: State<StateType>> 

Теперь этот код больше не будет компилироваться:

 class Foo: State<Foo> { val changeValue: StateChange<Bar> = Bar().changeValue } class Bar: State<Bar> { val changeValue: StateChange<Foo> = Foo().changeValue }