假設我有以下的RMI功能:縮小返回類型中斷RMI向後兼容性嗎?
Object foo();
唯一實現
Object foo() { return "some string"; }
我可以縮小返回類型String
沒有打破向後兼容性,如果客戶端和服務器都不可能一步到位發佈?
假設我有以下的RMI功能:縮小返回類型中斷RMI向後兼容性嗎?
Object foo();
唯一實現
Object foo() { return "some string"; }
我可以縮小返回類型String
沒有打破向後兼容性,如果客戶端和服務器都不可能一步到位發佈?
如果更改了服務器端的遠程接口爲String foo();
但嘗試使用具有Object foo();
舊的遠程接口的類文件運行客戶端,你會得到像下面這樣的異常:
java.rmi.UnmarshalException: unrecognized method hash: method not supported by remote object
RMI散列名稱,參數類型和返回類型,並查找完全匹配。不考慮新版本可能兼容的事實。
正如EJP所說,這也是一個Java語言問題。如果您嘗試針對新界面運行客戶端二進制文件(無需重新編譯),您將獲得NoSuchMethodError
,因爲此更改不是二進制兼容的。
這一點,但是,源兼容的變化,爲現有的客戶端源代碼可能做這樣的事情
String result = (String)stub.foo();
其檢查foo()從返回的對象返回改變時在源代碼級工作完全正常串。
這是一個Java語言問題,而不僅僅是一個RMI問題。答案是'不':你會得到一個NoSuchMethodError。