gpt4 book ai didi

Kotlin中抽象容器工具的泛型输入/输出?

转载 作者:行者123 更新时间:2023-12-02 13:39:02 26 4
gpt4 key购买 nike

我正在创建一个抽象工具类,该类对另一组外部类(不受我控制)进行操作。外部类在某些接口(interface)点概念上相似,但访问它们相似属性的语法不同。它们还具有不同的语法来应用工具操作的结果。我创建了一个带有内部类的数据类,基于 this answer by @hotkey .

这是泛型问题:外部类基本上是元素的容器。每个类的容器类型都不同。某些容器具有固定的元素类型,而其他容器带有通用元素类型。我无法应用 in 的泛型概念与 out ,该模型的协方差与逆变。下面是一个使用 CharSequence 和 List 切片的简化示例,它与泛型问题几乎完全相同:

// *** DOES NOT COMPILE ***
data class Slicer<C,E>(val obj: C, val beg: Int, val end: Int) {
// C is container type; E is element type
// but unsure how to apply in/out properly
inner abstract class SObj<C,E>{
abstract val len: Int // an input that tool requires
abstract val sub: C // an output of tool (container)
abstract val one: E // an output of tool (element)
inner class TCsq(val c: CharSequence): SObj<C,E>() {
override val len get()= c.length
override val sub get()= c.substring(adjusted) // PROBLEM
override val one get()= c[finder+5] // PROBLEM
}
inner class TList<E>(val l: List<E>): SObj<C,E>() {
override val len get()= l.size
override val sub get()= l.slice(adjusted) // PROBLEM
override val one get()= l[finder] // PROBLEM
}
// sample ops use both data class vals and abstract properties
val adjusted get()= (beg+1)..(len-1)
val finder get()= (end-beg)/2
}
}

我如何在此处正确申请入/出以完成这项工作? 或者,如果这不是最好的构造,那它还能如何构造?

注:请记住 CharSequenceList表示不能修改的外来类, adjustedfinder是该工具对类执行的许多操作的示例。今天,该工具的操作只是以重复和不统一的方式散布在各种容器内(或作为扩展)的代码库中。

最佳答案

如果我正确理解了这个问题,这里的方差不相关,你只是参数错误:

inner class TCsq(val c: CharSequence): SObj<CharSequence, Char>()


inner class TList<E>(val l: List<E>): SObj<List<E>,E>()

你不能这样做是进行“更改 E”的操作:这需要 Kotlin 不支持的更高种类的类型。

关于Kotlin中抽象容器工具的泛型输入/输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47366858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com