版本:
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本身是不支持重載的)但是有些時候可能有問題;所以最好是定義不同的函數名;