環境:Flex SDK 3.2 / JDK 1.7 / IntelliJ IDEA 14 / Flex Builder 3。驗證 ActionScript RemoteObject 對 Java 方法重載的調用行為。
public String test1(int info) { return "int:" + info; }
public String test1(float info) { return "float:" + info; }
public String test1(double info) { return "double:" + info; }
public String test1(long info) { return "long:" + info; }
public String test1(String info) { return "String:" + info; }
function testForOverload(type:String):void {
if ("1" == type) {
var info:int = 3;
hDFSFileUtil.test1(info); // 傳 int
}
if ("2" == type) {
var info2:String = "str3";
hDFSFileUtil.test1(info2); // 傳 String
}
if ("3" == type) {
var info3:Number = new Number(33); // Flex Number = IEEE 754 雙精度
hDFSFileUtil.test1(info3); // 傳 Number
}
}
| Flex 類型 | Java 實際調用 | 序列化映射規則 |
|---|---|---|
| int (3) | long 版本 | AS int → Java Long |
| String | String 版本 | AS String → Java String (精確匹配) |
| Number (33) | long 版本 | AS Number → Java Double → 匹配 long 重載 |
調整 Java 方法定義順序,發現 Flex 總是調用最後定義的匹配方法。例如將 double 版本移到 String 前面,則 Number 類型調用 double 版本。
int 序列化為 Java Integer,Number 序列化為 DoubleInteger 可隱式轉 long,Double 可隱式轉 long/double⚠️ 避免在 RemoteObject 暴露接口中使用 Java 重載!Flex 本身不支援重載,跨語言調用極易產生歧義。
getById(int) / getByName(String)Object 或 Map,內部類型判斷分發test1(ParamDTO dto) 避免重載跨語言 RPC 中,顯式優於隱式,單一職責優於重載複用,是接口設計的鐵律。