Java 如何使用IDL将对象作为参数传递

Java 如何使用IDL将对象作为参数传递,java,corba,idl,Java,Corba,Idl,我不熟悉idl,corba。我有一个java代码,我想通过使用它的一个方法来分发,这个方法需要来自另一个类的对象作为参数。请说明如何使用idl指定此场景 public void receive(Receiver rec, Message msg) { rec.treatMessage(msg); } 这就是我试图定义的idl module talk { struct Message{ string msg; double time; }; typedef R

我不熟悉idl,corba。我有一个java代码,我想通过使用它的一个方法来分发,这个方法需要来自另一个类的对象作为参数。请说明如何使用idl指定此场景

public void receive(Receiver rec, Message msg) {
    rec.treatMessage(msg);
}
这就是我试图定义的idl

module talk {
  struct Message{
    string msg;
    double time;
  };
  typedef Received Receiver;
  interface Contract{
    void receive(in Receiver rec, in Message msg);
  };
};
每次我对idlj运行这个命令时,我总是得到“Received”是一个未声明的类型。 请问我怎样才能解决这个问题


谢谢。

您必须使用操作treatMessage声明Receiver类型的接口,就像您使用操作receive声明Contract类型的接口一样。或者

module talk {
  struct Message{
    string msg;
    double time;
  };
  interface Receiver{
    void receive(in Message msg);
  };
};

这是否意味着如果我将Receiver类声明为接口,我将授予它远程访问权限?如果是,我不希望发生这种情况是的,在您将Receiver声明为接口的那一刻,您可以远程访问它。我不希望在这种情况下发生这种情况。一个选项是将其设置为valuetype,看起来像接口和结构之间的交叉,您可以将其值从一个系统移动到另一个系统,但使用起来稍微复杂一些。也许退一步,先描述一下您的需求到底是什么。我研究了valuetype,对于像我这样的初学者来说,它似乎很复杂。然后我偶然发现idl中的对象,它映射到java中的org.omg.CORBA.Object。我不知道我是否在正确的轨道上,但它似乎值得一看。