Scala是否支持Android的Parcelables?

时间:2014-08-05 10:40:03

标签: android scala parcelable

我已经读过,由于Scala编译器魔术,可以在Scala中实现Android Parcelable模式(需要静态类成员)。但是关于这一点的信息非常少,我不确定......

  • ......如果这是真的
  • ...如果我必须处理某些事情(例如设置编译器标志?)
  • ... CREATOR字段的位置(类或伴侣?)以及如何定义它(def,val,var?)

我尝试了各种组合,但总是以一个异常告诉我,CREATOR字段丢失。

2 个答案:

答案 0 :(得分:2)

至少在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宏,它创建了parcelable样板https://github.com/taig/parcelable

答案 1 :(得分:1)

通常,在Scala中无法创建静态字段。但是,CREATOR所需的Parcelable字段在编译器中是特殊的。只需在类本身中声明val CREATOR: Parcelable.Creator[YourClassNameHere],它就会被实现为静态字段。

有关完整示例,请参阅this gist