scala使用类型的附加参数定义类

时间:2013-02-09 02:38:39

标签: scala jackson jerkson

我正在使用一个案例类 - 其中包括其他参数 - 使用BigInt十六进制值进行实例化。我使用此案例类通过Jerkson / Jackson反序列化JSON消息。使用Jackson的美妙之处在于de / serialization基于其签名(我猜)在案例类中开箱即用。

现在,十六进制编码中的BigInt值需要使用额外的基数参数进行实例化:BigInt(hexValue,16)。但是,我的JSON消息不包含此类参数。我正在寻找一个解决方案,在我的case类定义中定义这个基数,这样Jackson就能继续使用没有配置的类。类似的东西:

case class MyClass(name: String, hexValue: BigInt(hexValue, 16))

我理解替代方法是a)明确定义JSON de / serialization或b)围绕BigInt定义我自己的包装类。但是我正在寻找更优雅的“scala-ish”解决方案 - 如果有的话。

注意:Int是不够的,它必须是BigInt。

2 个答案:

答案 0 :(得分:2)

您可以覆盖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)

答案 1 :(得分:1)

我认为你最好的选择是使用BigInt上的包装器。像

这样的东西
import  java.math.BigInteger

class   BigHexInt(hexString: String)
extends BigInt(new BigInteger(hexString, 16))

然后使用case class

撰写BigHexInt
case class MyClass(name: String, bigHex: BigHextInt)