【问题标题】:How to instantiate base class with different generic types?如何用不同的泛型类型实例化基类?
【发布时间】:2019-03-13 22:36:03
【问题描述】:

我正在尝试创建第二个构造函数,并根据构造函数调用使用不同的泛型类型调用父类。 一种是 GroupTrackInfoDTO,另一种是 TrackInfoDTO,但我不断收到编译错误

平台声明冲突:以下声明具有相同的 JVM签名

我的代码:

class GetSettingsTask
: BizOperationTask {

private var mCallback: BizTaskCallback<TrackSettings>? = null

constructor(operation: BizOperation<GroupTrackInfoDTO>,  mCallback: BizTaskCallback<TrackSettings>) : super(operation) {
    this.mCallback = mCallback
}


constructor(o: BizOperation<TrackInfoDTO>, mCallback: BizTaskCallback<TrackSettings>) : super(o) {
    this.mCallback = mCallback
}

如果我向其中一个构造函数添加一个虚拟参数,它会起作用,但不知道为什么

constructor(o: BizOperation<TrackInfoDTO>, mCallback: BizTaskCallback<TrackSettings>, i: Int = 0) : super(o) {
        this.mCallback = mCallback
    }

【问题讨论】:

    标签: java android generics kotlin


    【解决方案1】:

    它们是相同的 JVM 签名。您可以定义一个抽象类(AbstractTrackInfoDTO),它是TrackInfoDTO 和GroupTrackInfoDTO 的父类,然后声明构造函数如下:

    constructor(operation: BizOperation<AbstractTrackInfoDTO>,  mCallback: BizTaskCallback<TrackSettings>) : super(operation) {
        this.mCallback = mCallback
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 2011-04-02
      • 1970-01-01
      相关资源
      最近更新 更多