0

我正在使用服务提供者概念创建一个可扩展的 Java 应用程序。我有一个名为 PoolTuningStrategy 的抽象类,它是一项服务,我的应用程序的用户以扩展此 PoolTuningStrategy 类的服务提供者的形式提供他们的服务,用户以 jar 文件的形式提供他们的实现,我的应用程序使用 ServiceLoader 类来动态加载服务提供者如下

int i=0;
for (PoolTuningStrategy foo : ServiceLoader.load(PoolTuningStrategy.class,urlloaders)) 
            strategy[i++]=foo;

现在 strategy[] 包含所有实现集。现在我的问题是“如何创建一个扩展我的 Java 抽象类 PoolTuningStrategy 的 C++ 类,以便我可以使用 C++ 服务提供者。” 实际上,我希望我的应用程序能够被 Java 和 C++ 程序员扩展。我只使用 Java 完成了它,但我不知道如何通过 C++ 实现来扩展我的 Java 应用程序。

4

2 回答 2

3

您可以创建一个通过 JNI 委托给 C++ 实现的 Java 类。然而,C++ 类不能从 Java 继承,Java 类也不能从 C++ 继承。您必须改用委托。

于 2014-07-07T19:22:06.763 回答
0

接近这一点的一种方法是使用商业产品JunC++ion,它有效地允许 C++ 类实现 Java 接口。

在 Java 方面,您可以创建一个CppPoolTuningStrategy接受回调接口实例的新具体类IPoolTuningStrategySPI。然后,您的 C++ 用户可以实现该接口。

这消除了 C++ 用户编写 Java 胶水代码的需要。但是,它确实引入了第三方产品的成本。

于 2014-07-07T19:22:17.977 回答