2011-12-07 4 views
3

私は浮動小数点数(およびその点では整数)を整列化および非整列化するためにScalaでJAXBを使用する際に問題があります。私はこのような変数を持っている私のScalaのアプリでJAXBを使用したJava Floatではなく、Scalaオプション[Float]としてFloatをアンマーシャリングする方法は?

val taxPaid: Option[Float] 

taxPaidが0.0fに等しい場合、それは支払った一切の税金を意味しません。 taxPaidがNoneに等しい場合は、どれくらいの税金が支払われたかわからないことを意味します。

Option[Float]のような変数は、SQL float NULL列(私はSquerylを使用)に完全にマップされ、同様にJSONまたはXML内でうまく表現できます。私が持っている問題は、JAXBである - JAXBは、私はこのような、単純なJava Floatsを使用する必要があり、私のPOJO表現の中に、作業を取得する:JavaのFloatnullの値を取ることができないので、

@XmlElement(nillable = true, `type` = classOf[Object]) 
@BeanProperty 
var taxPaid: Float = _ 

そして、 0.0fの値はnullの(間違っていて損失の多い)プロキシとして扱われます。

私の質問は、Scala Option[Float]にXMLの浮動小数点をマーシャリングしアンマーシャリングする方法がありますか?nullの意義を維持していますか?

+4

java 'Float'は' null'の値を取ることができますが、 'float'プリミティブはできません。 –

+0

ありがとうIngo - あなたのコメントは、この1つの正しい方向に私を指摘(下記参照) –

答えて

1

インゴのコメントは正しい方向に私を操縦 - 問題はScalaのFloatはJava Floatできるのに対し、(おそらくNoneの慣用的使用を奨励する)nullに設定することができないということである。

scala> val nf:java.lang.Float = null 
nf: java.lang.Float = null 

scala> val nf:Float = null 
<console>:7: error: type mismatch; 
found : Null(null) 
required: Float 
Note that implicit conversions are not applicable because they are ambiguous: 
both method Float2floatNullConflict in class LowPriorityImplicits of type (x:  Null)Float 
and method Float2float in object Predef of type (x: java.lang.Float)Float 
are possible conversion functions from Null(null) to Float 
     val nf:Float = null 
        ^

だから、答えはちょうど私の表現が明示的にJavaのFloatsを使用していることを確認することです:

import java.lang.{Float => JFloat} 

@XmlElement(nillable = true, `type` = classOf[Object]) 
@BeanProperty 
var taxPaid: JFloat = _ 
関連する問題