在尝试执行操作时,我不知道是否可能使用嵌套类型:
这是问题的简化代码
界面
interface GroupRepository<T, F> {
fun save(): Kind<T, Group>
fun findAll() Kind<F, Group>
}
实施
class GroupRepositoryJpa(): GroupRepository<ForIO, IO<ForPage>> {
override fun findAll(): IO<PageK<Group>> {
val groups : Page<Group> = ...
return IO { groups.k() }
}
}
PageK.kt
class ForPageK private constructor() { companion object }
typealias PageKOf<A> = Kind<ForPageK, A>
@Suppress("UNCHECKED_CAST", "NOTHING_TO_INLINE")
inline fun <A> PageKOf<A>.fix(): PageK<A> = this as PageK<A>
data class PageK<A>(val page: Page<A>) : PageKOf<A>, Page<A> by page
fun <A> Page<A>.k(): PageK<A> = PageK(this)
在findAll
函数的实现中,当我尝试返回IO<PageK<Group>>
时,编译器告诉我Return type is 'IO<PageK<Group>>', which is not a subtype of overridden
问题是我尝试使用Kind<F, Group>
指定一个参数化接口,但是在这种情况下,结果应该是
IO-> PageK->组
与编译器所需的不同
(IO)->组。
有什么办法可以实现我想要做的事情?
提前谢谢
更新
最后我要做的是
界面
interface GroupRepository<T, F, G> {
fun save(): Kind<T, Group>
fun findAll() Kind<F, Kind<G Group>>
}
实施
class GroupRepositoryJpa(): GroupRepository<ForIO, ForIO, ForPageK> {
override fun findAll(): IO<PageK<Group>> {
val groups : Page<Group> = ...
return IO { groups.k() }
}
}