2011-06-20 5 views
1

私は、BlazeDSを使用してJavaオブジェクトをFlexにマーシャリングしています。私が目にしているのは、JavaのFloatが整数値(123などの整数)を保持している場合、ActionScript intにマーシャリングされます。私は、Java Floatが常にdocumented in the BlazeDS Developer GuideというようにActionScript Numberにマーシャリングされることを期待しています。BlazeDSはJava FloatをActionScriptにインテグレードします

これを設定する方法はありますか、これは単なるBlazeDSバグですか?

フォローアップ:フロートはマップ内に含まれています。

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

プリント:

123 
int 

だからです

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

それは、Flex側mapに到着Objectです:BlazeDSのに渡されるJavaのマップは、何かのように見えます間違った型として正しく値を直列化します。

+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に関連していません。 –

0

AS3/Javaの値オブジェクトの変数名は同じですか? RemoteClassタグを持つ値オブジェクトでは、

、精密な情報については AS3

public var myfloat:Number; 

のJava

public float myfloat = 10.4f; 

:この記事を見てください: How to deal with Number precision in Actionscript?

関連する問題