如何在没有公共构造函数的情况下使继承的类可分割?

问题描述 投票:0回答:4

我收到以下错误:


Parcelable 应该有主构造函数

我该如何解决这个问题?我有一个基类,其构造函数不共享基本构造函数,那么我如何扩展这样的类并使其在 kotlin 中可分割?

想法

添加主构造函数 => 然后我得到异常,
    PhoneAppItem
  • 中的辅助构造函数不会调用主构造函数,IDE 如下所示:
    
    
    
预计主构造函数调用

代码

这是产生此错误的基本准系统代码(

我有两个以上的简单构造函数!!

): PhoneAppItem

	
kotlin
4个回答
1
投票

abstract class AbstractPhoneAppItem : Parcelable { constructor() { } constructor(packageName: String?) { this.packageName = packageName } } @Parcelize class PhoneAppItem : AbstractPhoneAppItem { constructor() : super() constructor(packageName: String?) : super(packageName) }



0
投票

abstract class AbstractPhoneAppItem(): Parcelable { private var packageName: String? = null constructor(packageName: String?): this() { this.packageName = packageName } } @Parcelize class PhoneAppItem : AbstractPhoneAppItem { constructor() : super() constructor(packageName: String?) : super(packageName) }

这样,您可以在没有任何参数的情况下使用它(因此您的 packageName 为 null,或您想要的默认值)或与参数一起使用。然后,您的项目类可以调用超类的主构造函数。


0
投票
定制包裹机

abstract class AbstractPhoneAppItem (var packageName: String? = null) : Parcelable { }

否则,
@Parcelize class PhoneAppItem : AbstractPhoneAppItem { constructor() : super() constructor(packageName: String?) : super(packageName) companion object : Parceler<PhoneAppItem> { // modify logic to taste override fun PhoneAppItem.writeToParcel(parcel: Parcel, flags: Int) { parcel.writeString(packageName) } override fun create(parcel: Parcel): PhoneAppItem { return PhoneAppItem(parcel.readString()) } } }

确实需要一个主构造函数来知道要做什么。

    


0
投票

@Parcelize

	
© www.soinside.com 2019 - 2024. All rights reserved.