2011-06-20 70 views
1

我使用BlazeDS將Java對象編組爲Flex。我所看到的是,如果Java Float擁有一個整數值(整數,如123),那麼它將被編組爲ActionScript int。我期望Java Float總是被編組爲ActionScript Number,編號爲documented in the BlazeDS Developer GuideBlazeDS marshalls Java Float to ActionScript int

有沒有辦法配置這個,或者這只是一個BlazeDS的錯誤?

後續行動:浮動包含在地圖中。正在傳遞到BlazeDS的Java的地圖看起來類似:

Map map = new HashMap(); 
Float f = 123.0; 
map.put("number", f); 

當它到達在Flex端mapObject

var map:Object = ... 
trace(map.number); 
trace(getQualifiedClassName(map.number)); 

打印:

123 
int 

所以這正確地序列化值,就像錯誤的類型一樣。

+0

你可以在Flex端顯示代碼嗎?您是使用RemoteAlias還是僅使用動態對象? –

+0

動態對象,請參閱上文。 –

+0

我相信默認情況下,如果你沒有在Flex端指定一個值對象,它會嘗試使用盡可能最低的值(在這種情況下爲int)作爲你的類型。 –

回答

2

這有什麼好使用BlazeDS本身。這是一個AS3「功能」..

這將有助於瞭解正在發生的事情。或迷惑你甚至更多...

第一件事:** JAVA:java.lang.Float中,浮==> AS3:數量* *

var number:Number = 4.5; 
trace(typeof(number) == "number");  //true 
trace(number is Number);    //true 

var integer:int = 2; 
trace(typeof(integer) == "number");  //true! 
trace(integer is Number);    //true! 

//number=4.5 
trace(number is int);     //false 
trace(getQualifiedClassName(number)); //Number 

//Here comes the fun.. 
number=number-0.5; //number=4 
trace(number is int);     //true!! 
trace(getQualifiedClassName(number)); //int!! 

希望這實際上幫助!

+0

是的,它不是BlazeDS相關的。 –