我正在尝试加载我正在使用的第三方库所需的JNI库。由于该库只需要加载一次,所以我尝试将加载放入伴随类中。我认为这会起作用:
<body>
<div class="bar flex">
<div class="bar fill" style="width: 75%">
<div class="tag">Javascript</div>
</div>
<span class="value">75%</span>
</div>
</body>
这显然在Solver类初始化程序(import com.example.Solver
object MyClass {
System.loadLibrary("jnilibrary")
}
class MyClass {
import MyClass._
implicit val solver = new Solver()
}
中引发了UnsatisfiedLinkError
,显然是因为尚未加载JNI库。
将课程更改为
Solver.<clinit>
有效,所以我确实将库放在正确的位置。将class MyClass {
System.loadLibrary("jnilibrary")
implicit val solver = new Solver()
}
移到System.loadLibrary
声明之后会导致它以与尝试在伴随类中加载库相同的方式失败。
我认为在运行初始化程序之前它试图解析类型,因此我尝试将库加载移至基类。我希望这意味着基类(装入库)在派生类(装入类)开始初始化之前已完全初始化。
solver
这也失败。
我显然可以在类中加载库,但这是多余的。它可能不会使速度减慢很多(假设loadLibrary不会重新加载已经加载的库),但是没有我想要的那么干净。
是否有办法使它与伴随对象一起工作?
答案 0 :(得分:0)
正如Alex Cohn所指出的,解决方案是
class MyClass {
MyClass
implicit val solver = new Solver()
}