我正在使用BlazeDS将Java对象编组到Flex。我看到的是,如果Java Float
包含一个整数值(整数,如123),那么它将被编组为ActionScript int
。我希望Java Float
总是被编组为ActionScript Number
,如BlazeDS Developer Guide中所述。
有没有办法对此进行配置,或者这只是一个BlazeDS错误?
后续:浮动包含在映射中。传递给BlazeDS的Java映射看起来像:
Map map = new HashMap();
Float f = 123.0;
map.put("number", f);
当它到达Flex侧时,map
是Object
:
var map:Object = ...
trace(map.number);
trace(getQualifiedClassName(map.number));
打印:
123
int
因此,它正确地序列化了值,就像错误的类型一样。
这与BlazeDS本身无关。这是AS3的"功能"。。
这将有助于了解发生了什么。或者让你更加困惑。。。
第一件事:**JAVA:JAVA.lang.Float and 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!!
希望这真的有帮助!
AS3/Java值对象中的变量名是否相同?
在具有RemoteClass标记的值对象中,AS3
public var myfloat:Number;
Java
public float myfloat = 10.4f;
有关精度信息:请查看此帖子:如何在Actionscript中处理数字精度?