在Kotlin中抽象容器工具的generics进/出?

我正在创建一个抽象工具类,在另一组外部类(不受我控制)上运行。 外部类在概念上在界面的某些点上是相似的,但是对于访问它们的类似属性具有不同的语法。 他们也有不同的语法来应用工具的操作结果。 我用@hotkey根据这个答案创建了一个带有内部类的数据类。

这是generics的问题:外部类基本上是元素的容器。 每个类的容器types是不同的。 某些容器具有固定的元素types,而其他容器具有通用元素types。 我很难将这个generics概念in vs, out ,协方差与这个模型的逆变。 下面是一个简单的例子,使用CharSequence和List的切片,就类似于这个generics,

 // *** DOES NOT COMPILE *** data class Slicer(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{ 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() { 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(val l: List): SObj() { 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 } } 

我如何正确申请进出这里做这项工作? 另外,如果这不是最好的结构,那么这个结构又怎样呢?

NB请记住, CharSequenceList代表不能被修改的外部类, adjustedfinder是工具在类上执行的许多操作的样本。 今天,工具的操作只是以重复和非均匀的方式散布在各个容器内的代码库(或作为其扩展)。

如果我正确地理解了这个问题,那么方差在这里是不相关的,你刚刚得到了错误的参数:

 inner class TCsq(val c: CharSequence): SObj() 

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

不能这样做的是有“改变E ”的操作:这需要Kotlin不支持的更高级的types。