Interface Kotlin是否允许函数返回此接口的值';实施';s型?

Interface Kotlin是否允许函数返回此接口的值';实施';s型?,interface,kotlin,Interface,Kotlin,我想写这样的东西: /** *表示一个大或小的状态。 */ 界面状态{ /** * */ val changeValue:StateChange//不编译;“This”是我编写的一个关键字,它可能引用实现类 } /** *表示状态中的更改,无论大小。 * *@param StateType已更改的状态类型 */ 接口状态更改 然而,正如我在评论中所指出的,我不知道这个的语法。这是否存在?或者我必须使用变通方法,比如强制一个状态将其自身作为一个泛型参数 如果不明显,我不能使用val chan

我想写这样的东西:

/**
*表示一个大或小的状态。
*/
界面状态{
/**
* 
*/
val changeValue:StateChange//不编译;“This”是我编写的一个关键字,它可能引用实现类
}
/**
*表示状态中的更改,无论大小。
*
*@param StateType已更改的状态类型
*/
接口状态更改
然而,正如我在评论中所指出的,我不知道这个的语法。这是否存在?或者我必须使用变通方法,比如强制一个状态将其自身作为一个泛型参数


如果不明显,我不能使用
val changeValue:StateChange
,因为这样就可以实现这一点,我不希望:

// 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 }
//坏例子-这是我想要避免的
类Foo:State{val changeValue:StateChange=Bar().changeValue}
类栏:状态{val changeValue:StateChange=Foo().changeValue}

您可以使用具有递归上限的类:

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

interface StateChange<StateType: State<StateType>>
接口状态{
val CHANGERVALUE:状态更改
}
接口状态更改
现在,此代码将不再编译:

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

您可以使用具有递归上限的类:

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

interface StateChange<StateType: State<StateType>>
接口状态{
val CHANGERVALUE:状态更改
}
接口状态更改
现在,此代码将不再编译:

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

Bar()。changeValue
的类型为
StateChange
,您正试图将其分配给
StateChange
。即使成功了,那意味着什么?@miensol我不知道。这就是为什么我不想让它成为可能。
Bar().changeValue
属于
StateChange
类型,您正试图将其分配给
StateChange
。即使成功了,那意味着什么?@miensol我不知道。这就是为什么我不想让它成为可能,所以我必须“使用变通方法,比如强制一个状态将其自身作为一个泛型参数”?哦,是的。“self-type”的概念在编程语言中相对少见,据我所知,它在互操作场景中与Java的类型系统的交互非常糟糕。因此我必须“使用一些变通方法,比如强制状态本身作为泛型参数”?哦,是的。“自类型”的概念在编程语言中相对少见,据我所知,它在互操作场景中与Java的类型系统的交互非常糟糕。