我正在使用服务提供者概念创建可扩展的Java应用程序。我有一个名为PoolTuningStrategy的抽象类,它是一个服务,我的应用程序的USERS以服务提供者的形式提供他们的服务,扩展了这个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应用程序。
答案 0 :(得分:3)
您可以创建一个通过JNI委托给C ++实现的Java类。但是,C ++类不能从Java继承,Java类也不能从C ++继承。你必须改为使用委托。
答案 1 :(得分:0)
接近这一点的一种方法是使用商业产品JunC++ion,它有效地允许C ++类实现Java接口。
在Java方面,您可以创建一个新的具体类CppPoolTuningStrategy
,它接受一个回调接口IPoolTuningStrategySPI
的实例。然后,您的C ++用户可以实现该接口。
这使您的C ++用户无需编写Java粘合代码。但是,它确实引入了第三方产品的成本。