可以使用带有箭头的嵌套种类类型吗?种类<T <种类F,G >>

时间:2020-05-02 17:07:32

标签: kotlin

在尝试执行操作时,我不知道是否可能使用嵌套类型:

这是问题的简化代码

界面

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() }
   }
}

0 个答案:

没有答案