版本:
flex sdk:3.2,jdk:1.7;intellij idea14; flex builder3;
問題說明:
在使用actionscript的remoteObject調用java的重載方法時,是否可以調用?是否調用的是重載的方法?
實驗:
1. java後台代碼:
public String test1(int info){ System.out.println("int:"+info); return "int:"+info; } public String test1(float info){ System.out.println("float:"+info); return "float:"+info; } public String test1(double info){ System.out.println("double:"+info); return "double:"+info; } public String test1(long info){ System.out.println("long:"+info); return "long:"+info; } public String test1(String info){ System.out.println("String:"+info); return "String:"+info; }2. flex前台代碼:
function testForOverload(type:String):void{ if("1"==type){ var info :int = 3; hDFSFileUtil.test1(info); } if("2"==type){ var info2 :String = "str3"; hDFSFileUtil.test1(info2); } if("3"==type){ var info3:Number =new Number(33); hDFSFileUtil.test1(info3); } }
<mx:button label="測試1" click="testForOverload('1')" visible="true"> <mx:button label="測試2" click="testForOverload('2')" visible="true"> <mx:button label="測試3" click="testForOverload('3')" visible="true"></mx:button></mx:button></mx:button>直接點擊“測試1”、“測試2”、“測試3”button,發現調用的分別是long,string ,long ,這說明flex中的string 和int/Number是可以區分的;但是int/Number轉過來到java,是哪種類型呢?是long麼?
實驗:
調整java後台的前面四個函數的位置,發現不管哪個函數,如果是在最後(正常排序),那麼就調用的是那個;比如把double函數移到string函數的前面,那麼java調用的就是double;
總結:
這個圖是從flex4的文檔來的,可以看到在基本類型從flex傳到java時,int類型被序列化成Integer、Number被序列化成Double,然後在java端接收。但是,在java端接收可以有多種類型來接收的;
所以,結論是:flex調用java端的重載函數,在一定程度上是可以的;(這裡需要注意flex本身是不支持重載的)但是有些時候可能有問題;所以最好是定義不同的函數名;