Parcelable派生类在科特林(Parcelable Derived Class in Kotl

2019-10-29 22:06发布

我使用的是Android Parcelable插件从https://github.com/nekocode/android-parcelable-intellij-plugin-kotlin

我用这个定义试图在一个类

class ChessClock : TextView  {
    lateinit var player:String
    constructor(context: Context) : super(context)
    constructor(context:Context, p:String, angle:Float) : this(context) {
       player = p
       rotation = angle
   }
   <snip>
}

和定义改为

class ChessClock() : TextView, Parcelable {
   lateinit var player:String 
   constructor(context: Context) : super(context)
   constructor(context:Context, p:String, angle:Float) : this(context){
       player = p
       rotation = angle
   }
   <snip -- various stuff added here>
}

两个语法错误得到强调。

在行

class ChessClock() : TextView, Parcelable

TextView有下划线与评论“这种类型有一个构造函数,并且必须在这里初始化。”

在行

constructor(context: Context) : super(context)

super有下划线与评论“主构造函数调用的预期。”

我只用了科特林的几个星期,我不明白是怎么回事。 首先,我知道(或至少我认为我知道)科特林没有实现多重继承,所以我不明白是什么

类ChessClock():TextView的,Parcelable

手段。 这真的是合法的科特林? 如何才能使科特林派生类Parcelable?

Answer 1:

  1. TextView的一类,因此你的主构造应该调用其构造函数之一
  2. 你应该调用其他构造的主构造

例:

class ChessClock(context: Context) : TextView(context), Parcelable

//in this case you don't need other constructors but in-case you do, this is how you should write it:
constructor(context: Context, dummy: Int): this(context)


Answer 2:

你也可以只改变从生成的代码ChessClock()ChessClock



文章来源: Parcelable Derived Class in Kotlin