我读过,由于scala编译器的魔力,可以在scala中实现android parcelable模式(这需要一个静态类成员)。不过,关于这方面的信息很少,我不确定…
…如果这是真的
…如果我必须处理一些事情(例如设置编译器标志?)
CREATOR字段的位置(类或同伴?)以及如何定义它(def,val,var?)
我尝试了各种组合,但最后总是有一个异常告诉我,缺少CREATOR字段。

最佳答案

至少在scala 2.11.2中,CREATOR字段会进入伴随对象:

class ParcelExample( val some: String, val arbitrary: Int, val values: Boolean ) extends Parcelable
{
    override def describeContents() = 0

    override def writeToParcel( dest: Parcel, flags: Int )
    {
        dest.writeString( some )
        dest.writeInt( arbitrary )
        dest.writeValue( values )
    }
}

object ParcelExample
{
    val CREATOR: Parcelable.Creator[ParcelExample] = new Parcelable.Creator[ParcelExample]
    {
        override def createFromParcel( source: Parcel ): ParcelExample = new ParcelExample(
            source.readString(),
            source.readInt(),
            source.readValue( classOf[Boolean].getClassLoader ).asInstanceOf[Boolean]
        )

        override def newArray( size: Int ): Array[ParcelExample] = new Array[ParcelExample]( size )
    }
}

我创建了一个scala宏来生成可打包的样板文件https://github.com/taig/parcelable

07-27 16:45