serialize scala.Some with Kryo

对scala 反射不太明了,kryo里涉及到scala内置类时,经常因为没有无参构造而抛异常


Caused by: java.lang.InstantiationException: scala.Some
at java.lang.Class.newInstance0(Class.java:357)
at java.lang.Class.newInstance(Class.java:325)
at com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:676)
... 12 more



思路是,转化成java基础类解决;
[i][b]obj.asInstanceOf[Option[Any]][/b][/i] 这句简直要了亲命了,一开始在想尽办法想把这个generic的T找到,最后发现Any解决所有问题,对于scala的generic还是需要研究 :?


def writeObjectData(buffer: ByteBuffer, obj: Object): Unit = {
if (obj == None) {
kryo.writeClassAndObject(buffer, None)
} else {
kryo.writeClassAndObject(buffer, obj.asInstanceOf[Option[Any]].get)
}
}

def readObjectData[T](buffer: ByteBuffer, objType: java.lang.Class[T]): T = {
val obj = kryo.readClassAndObject(buffer)
if (obj == None) {
None.asInstanceOf[T]
} else {
Some(obj).asInstanceOf[T]
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值