Java 基于我想要隐藏的调用的插件
我想让我的项目有可能通过插件进行扩展。对于该界面的用户,我想创建一个单独的小jar(plugin.jar)文件,公开编写插件所需的所有内容 该插件应该只实现一种方法Java 基于我想要隐藏的调用的插件,java,plugins,Java,Plugins,我想让我的项目有可能通过插件进行扩展。对于该界面的用户,我想创建一个单独的小jar(plugin.jar)文件,公开编写插件所需的所有内容 该插件应该只实现一种方法双重计算(double)。为此,我可以公开一个接口。但是我也希望插件能够调用一些函数double-getParameter(string) 现在它变得很棘手(至少对我来说)。getParameter的实际实现依赖于其他一些jar,我不想在plugin.jar中引用这些jar。(出于清洁的原因,没有更多)所以我不能为我的用户提供某种Pl
双重计算(double)
。为此,我可以公开一个接口。但是我也希望插件能够调用一些函数double-getParameter(string)
现在它变得很棘手(至少对我来说)。getParameter
的实际实现依赖于其他一些jar,我不想在plugin.jar中引用这些jar。(出于清洁的原因,没有更多)所以我不能为我的用户提供某种PluginBase类
我提出的最佳解决方案是使用pImpl习惯用法和附加接口的某种组合:
我公开了一个抽象基类,它通过在一个接口仅包含getParameter
的对象上调用来实现final getParameter
。在我的应用程序中创建插件作为该getParameter
函数的实现时,会传递此对象。然而,这意味着这个PluginBase类需要一个setImplementation
函数
用户端:
class UserPlugin extends PluginBase
{
@Override
public double Calculate(double input)
{
return input + this.getDoubleInput("X") + this.getDoubleInput("Y");
}
}
Jar提供插件接口和类
public interface IHasInputParameters { Double getParameter(String s) }
public class PluginBase implements IHasInputParameters
{
private IHasInputParameters impl;
public abstract double Calculate(double input)
@Override
public final Double getParameter(String s) { return impl.getParameter(s));}
public final void SetImplementation(IHasInputParameters i) { this.impl = i;}
}
内侧
class PluginImpl implements IHasInputParameters
{
@Override
public final Double getParameter(String s)
{ //// do stuff that depends on stuff I don't want to expose}
}
这基本上有效。但必须解决问题
PluginImpl implementation = new PluginImpl ();
Plugin plugin = new Plugin();
plugin.setImplementation(implementation);
implementation.SetImplementation(plugin);
是否有更简单/更安全的方法执行此操作?发布代码而不是图片。这是不清晰的。图片不是用来阅读代码,而是用来显示类的位置。图片缩放不好,有别名,文本。它们没有任何作用,只是混淆了岗位。如果它们很重要,请将它们转换为代码。如果它们不重要,请删除它们。好的,我转换了它们的邮政编码而不是图片。这是不清晰的。图片不是用来阅读代码,而是用来显示类的位置。图片缩放不好,有别名,文本。它们没有任何作用,只是混淆了岗位。如果它们很重要,请将它们转换为代码。如果它们不重要,就把它们去掉。好吧,我把它们改了