我清楚地知道 CORBA 和 RMI 之间的区别,除了关于in
, out
, inout
.
CORBA 使用 IDL 语言描述接口,定义的方法中的参数有关键字:in
, out
, inout
. 它们的含义如下:
in
:参数从操作的调用者传递给对象。out
:参数从对象传递给调用者。inout
: 参数双向传递。
我的问题:为什么在 CORBA 中关键字(和)是必需的in
,而在 JAVA/RMI 中却不是必需的。out
inout
但在 JAVA/RMI 中不是必需的。
它们在 Java 中不可用,更不用说 Java RMI。设计师决定通过价值传递一切。
这只是一个设计决定。它们设计的主要区别在于 CORBA 被设计为独立于平台和编程语言,而 RMI 是专门为 Java 编程语言设计的。
许多编程语言都有自己的表达方式in
或out
参数inout
方向,CORBA IDL 语言有其直接的等价物。在其他语言(例如 Java)中,这些结构必须使用复杂的包装器结构来实现。
Java 编程语言没有out
或inout
参数(虽然可以通过创建一个简单的值包装类来实现),所有参数都是通过in
值(对于值类型)或引用(对于引用类型)传递的。而且由于 Java 本身不支持语言级别的参数方向,因此在 RMI 中也没有必要这样做。