scala调用java库_从scala调用java时的java.lang.IllegalAccessError – solutions / workarounds?...

我正在使用

java线性代数库(ojalgo 32.0)进行scala项目,我遇到了一个

奇怪的问题.我使用的每种ojalgo方法都很好(例如矩阵

和逐元素乘法,逆矩阵和随机矩阵

除了用于获得矩阵尺寸的两个看似简单的一代之外.我从来没有过

之前调用java库的麻烦,我很好奇

这是怎么回事.这是java中的一些示例代码,可以正常工作:

public static void main(String[] arg) {

MatrixFactory tmpFactory = PrimitiveMatrix.FACTORY;

BasicMatrix wMat = tmpFactory.makeRandom(5,5,new Weibull(5.0, 2.0));

System.out.println(wMat.getColDim());

}

对scala的简单翻译(使用版本2.9.2):

object DataGen {

def main(args:Array[String]):Unit = {

val tmpFactory = PrimitiveMatrix.FACTORY

val wMat = tmpFactory.makeRandom(5,5,new Weibull(5.0, 2.0))

println(wMat.getColDim)

}

scala代码抛出这个:

Exception in thread "main" java.lang.IllegalAccessError: tried to

access class org.ojalgo.access.Structure2D from class DataGen$

at DataGen$.main(DataGen.scala:11)

at DataGen.main(DataGen.scala)

第11行是

println(wMat.getColDim).

搜索此错误的其他情况表明scala中存在访问错误的一些已知问题,但我仍然不确定问题的原因或最干净的解决方法.

最佳答案 我并不完全理解为什么它不起作用,但我玩了一下它并发现,BasicMatrix不可访问,因为我试图明确地将Matrix转换为它,因为这是实现getColDim的地方.然而,当我将Matrix转换为PrimitiveMatrix时,它有效:

scala> res1.asInstanceOf[PrimitiveMatrix].getColDim

res9: Int = 5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值