想象一下我有这样的课程:
open class CSRequest<Data : Any>(open val onSend: () -> CSResponse<Data>) {
// some other code
}
我希望有时能够覆盖它,所以我可以写一些类似的东西:
class SpecialRequest(items: List<String>) : CSRequest<CSServerData>() {
override val onSend: () -> CSResponse<CSServerData> = {
// Do send work
}
}
但是我不能。这是我的API。我在问,如果我能以某种方式设计类CSRequest,那么onSend的值将通过扩展类CSRequest被覆盖,但同时可以作为构造函数参数传递。
答案 0 :(得分:0)
超类构造函数需要一个() -> CSResponse<Data>
类型的参数。因此,子类在调用超级构造函数时必须传递这样的值,并且不需要重写任何内容。
由于您尚未发布代码段中使用的类的代码,因此我将举一个简单的示例:
class CSResponse<D>(val body: D)
class CSServerData
open class CSRequest<Data : Any>(open val onSend: () -> CSResponse<Data>) {
// some other code
}
class SpecialRequest(items: List<String>) : CSRequest<CSServerData>({ CSResponse(CSServerData()) })