我读过,由于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