gpt4 book ai didi

java - 我可以使用 IDL 中定义的接口(interface)作为另一个 IDL 接口(interface)方法的返回类型吗?

转载 作者:行者123 更新时间:2023-11-30 11:13:39 27 4
gpt4 key购买 nike

假设我创建了以下 IDL 文件:

module ProviderTest {
interface Multiplier {
long twice(in long number);
};

interface MultiplierProvider {
Multiplier get();
};
};

为了稍后能够在客户端执行这样的调用(在 Java 中):

MultiplierProvider provider = /* obtain a stub form ORB */
Multiplier multiplier = provider.get();
int four = multiplier.twice(2);

Java IDL 编译器会毫无怨言地为该 IDL 生成代码,但我在为 MultiplierProvider servant 编写实现时遇到了问题。它的get()方法有一个返回类型Multiplier,这是一个生成的接口(interface)。为了实现MultiplierProvider,我扩展了MultiplierProviderPOA,但是我没有适合Multiplier的实现类,所以我无法实现 >get() 方法。

通常(如果 Multiplier 未从 MupltiplierProvider 引用),在服务器端我会扩展 MultiplierPOA(生成的类),然后通过命名服务发布它。问题是 MultiplierPOA 没有实现 Multiplier 接口(interface),所以它的实例不能从 MultiplierProvider.get() 返回。

我在这里是否遗漏了一些基本原则,您不能使用 CORBA IDL 做这样的事情(或者 Java 的 IDL 支持可能无法处理这种情况)?如果可以实现这样的接口(interface) - 实现如何工作?

最佳答案

这是可能的。在 C++ 中,您将从 MultiplierPOA 创建一个派生类并创建它的一个实例。然后,您将使用 _this() 成员函数返回对象引用并可能激活默认 POA 上的仆人(如果之前未激活它)。

在粗略的 C++ 中:

MyMultiplierPOA_ptr servant = new MyMultiplierPOA();
Multiplier_ptr object_ref = servant->_this(); // activate & create object reference
return object_ref; // return to caller

我遗漏了一些神秘的 IDL 到 C++ 映射的废话(例如 _duplicate_var 东西,所以我不会混淆你)。

我知道您需要 Java 答案,但也许这会有所帮助。我假设 IDL 到 Java 的映射提供了与 _this() 类似的机制。您可能想咨询 IDL to Java mapping document on the OMG website .乍一看,它确实支持 _this() 方法。

关于java - 我可以使用 IDL 中定义的接口(interface)作为另一个 IDL 接口(interface)方法的返回类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26360856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com