首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用类型的附加参数定义scala类

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

Stack Overflow用户
提问于 2013-02-09 10:38:39
回答 2查看 166关注 0票数 1

我使用的是一个case类,在其他参数中,它是用一个BigInt十六进制值实例化的。我使用这个case类通过Jerkson/Jackson反序列化JSON消息。使用Jackson的美妙之处在于,对于基于其签名的case类,反/序列化可以开箱即用(我猜)。

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

代码语言:javascript
复制
case class MyClass(name: String, hexValue: BigInt(hexValue, 16))

我知道另一种方法是a)显式地定义JSON反序列化,或者b)定义我自己的围绕BigInt的包装类。然而,我正在寻找一个更优雅、更“scala式”的解决方案--如果有的话。

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

EN

回答 2

Stack Overflow用户

发布于 2013-02-09 12:24:01

您可以重写apply方法来自定义case class实例化。

代码语言:javascript
复制
case class MyClass (name: String, hexValue: BigInt)

object MyClass{
  def apply(name: String, hexValue: String) = 
                            new MyClass(name,BigInt(hexValue,16))
}

将其用作

代码语言:javascript
复制
MyClass("Foo","29ABCDEF")   //> res0: MyClass = MyClass(Foo,699125231)
票数 2
EN

Stack Overflow用户

发布于 2013-02-09 12:28:49

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

代码语言:javascript
复制
import  java.math.BigInteger

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

然后使用BigHexInt编写case class

代码语言:javascript
复制
case class MyClass(name: String, bigHex: BigHextInt)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14784375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档