如果库不存在,我必须实现一个宏,该宏用另一个实现的类替换类的实现。原因是用户可能不愿意安装复杂的库(比如名称是complex.jar)。即使库不存在,代码编译也非常重要。
实际例子: 想想例如用于计算复杂数学函数的工具。我们假设我们现在想要添加绘制结果的功能。为此我们使用Matlab(我知道还有其他人,这只是一个例子)。我们假设Matlab有一个jar文件。由于并非所有用户都安装了Matlab,我希望我的代码也可以在没有这个jar的情况下编译,尽管它使用了这个jar中的方法。
示例:
@ReplaceMeIfLibDoesNotExist("complex","DefaultConnector.scala")
class ComplexConnector{
import complex._;
def connect(){
complex = new ComplexLibrary(); // part of complex.jar
}
}
class DefaultConnector{
def connect(){
println("Currently not supported. Install complex.jar")
}
}
这样的事情会起作用吗? Macro实现如何?还是有更优雅的方式做这样的事情?有一个具体的代码示例会很高兴。
非常感谢你。
答案 0 :(得分:0)
我认为宏不适用于此 - 宏在编译时起作用,而听起来您希望根据运行时可用的库来更改功能。我建议使用SLF4J的静态绑定方法 - 通过静态方法加载ComplexLibrary,这个方法在你的connector-complex.jar中以不同的方式实现。