我使用的是一个case类,在其他参数中,它是用一个BigInt十六进制值实例化的。我使用这个case类通过Jerkson/Jackson反序列化JSON消息。使用Jackson的美妙之处在于,对于基于其签名的case类,反/序列化可以开箱即用(我猜)。
现在,十六进制编码中的BigInt值需要用另外一个基数参数实例化: BigInt(hexValue,16)。但是,我的JSON消息不包含这样的参数。我正在寻找一个解决方案,在我的case类的定义中定义这个基数,这样Jackson就可以继续使用这个类,而不需要配置。类似于:
case class MyClass(name: String, hexValue: BigInt(hexValue, 16))我知道另一种方法是a)显式地定义JSON反序列化,或者b)定义我自己的围绕BigInt的包装类。然而,我正在寻找一个更优雅、更“scala式”的解决方案--如果有的话。
注意: Int是不够的,它必须是BigInt。
发布于 2013-02-09 12:24:01
您可以重写apply方法来自定义case class实例化。
case class MyClass (name: String, hexValue: BigInt)
object MyClass{
def apply(name: String, hexValue: String) =
new MyClass(name,BigInt(hexValue,16))
}将其用作
MyClass("Foo","29ABCDEF") //> res0: MyClass = MyClass(Foo,699125231)发布于 2013-02-09 12:28:49
我认为你最好的选择是在BigInt上使用包装器。就像这样
import java.math.BigInteger
class BigHexInt(hexString: String)
extends BigInt(new BigInteger(hexString, 16))然后使用BigHexInt编写case class
case class MyClass(name: String, bigHex: BigHextInt)https://stackoverflow.com/questions/14784375
复制相似问题