abstract class FooTable<M, D> where M : IModel, D : IDto {
///...
fun getTableData(models: ArrayList<M>): ArrayList<D> {
// ...
}
}
我还有一个类使用它,比如:
abstract class FooPage<M, F> where M : IModel, F : IFilter {
abstract val table: FooTable<M, out IDto>
page.table.getTableData(arrayListOf(m1, m2)).first()
它给了我:
外投影类型
FooTable<out IModel, out IDto>
禁止使用
public final fun getTableData(models: kotlin.collections.ArrayList<M> /* = java.util.ArrayList<M> */): kotlin.collections.ArrayList<D> /* = java.util.ArrayList<D> */
定义于
com.menighin.example.models.FooTable
这里是一个问题的小摆设:
https://pl.kotl.in/ryirJJH9m
代码是:
interface IModel
interface IDto
interface IFilter
class Model : IModel
class Dto : IDto
class Filter : IFilter
class FooTable<M, D> where M : IModel, D : IDto {
fun getTableData(models: List<M>): ArrayList<D> {
return ArrayList()
}
fun testPage(masterModel: IModel, thisPage: FooPage<out IModel, out IFilter>) {
thisPage.table.getTableData(arrayListOf(masterModel))
}
fun testTable(masterModel: IModel, masterTable: FooTable<out IModel, out IDto>) {
masterTable.getTableData(arrayListOf(masterModel))
}
}
class FooPage<M, F> where M : IModel, F : IFilter {
val table: FooTable<M, out IDto> = FooTable()
}
fun main() {
val page = FooPage<Model, Filter>()
val a = page.table.getTableData(arrayListOf())
println("Hello, world!!!")
}
基本上,我的系统中有一个函数
FooTable
其中我需要获取另一个表的引用并获取其数据。我想我已经可以传递数据了,但我很好奇为什么现在不起作用。。。
this question
如果我能改变
abstract val table: FooTable<M, out IDto>
abstract val table: FooTable<M, Any>
没关系。。。但是,据我所知,我不能,因为
可行走
IDto