1

私は、他のパラメーターの中でも、BigInt 16 進数値でインスタンス化されるケース クラスを使用しています。このケース クラスを使用して、Jerkson/Jackson 経由で JSON メッセージを逆シリアル化します。Jackson を使用する利点は、署名に基づいてケース クラスのデシリアライゼーションがすぐに使用できることです (推測します)。

現在、16 進エンコーディングの BigInt 値は、追加の基数パラメータ BigInt(hexValue, 16) でインスタンス化する必要があります。ただし、私の JSON メッセージにはそのようなパラメーターは含まれていません。ケースクラスの定義内でこの基数を定義して、ジャクソンが構成なしでクラスを引き続き使用できるようにするソリューションを探しています。何かのようなもの:

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

別の方法として、a) JSON デシリアライゼーション/シリアライゼーションを明示的に定義するか、b) BigInt の周りに独自のラッパー クラスを定義することを理解しています。ただし、よりエレガントで「スカラっぽい」ソリューションを探しています-もしあれば。

注: Int では不十分です。BigInt である必要があります。

4

2 に答える 2

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)
于 2013-02-09T04:24:00.697 に答える
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)
于 2013-02-09T04:28:49.390 に答える