我已经读过,由于Scala编译器魔术,可以在Scala中实现Android Parcelable模式(需要静态类成员)。但是关于这一点的信息非常少,我不确定......
CREATOR
字段的位置(类或伴侣?)以及如何定义它(def,val,var?)我尝试了各种组合,但总是以一个异常告诉我,CREATOR
字段丢失。
答案 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。