2013-12-10 33 views

回答

3

如果更改了服務器端的遠程接口爲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()從返回的對象返回改變時在源代碼級工作完全正常串。

2

這是一個Java語言問題,而不僅僅是一個RMI問題。答案是'不':你會得到一個NoSuchMethodError。