我有一些需要相互交谈的MATLAB代码和一些Java代码。我收到了NoSuchMethodError 。当我将MATLAB double数组传递给接受double[]参数的Java方法时。
因此,我编写了一个简单的“ hello world”来获取传递给该方法的对象的类
public void printArray(Object array) { System.out.println(array.getClass()); System.out.println(array.getClass().getPackage()); } 从MATLAB调用此方法,得到以下有趣的输出:
>> a.printArray(2) class java.lang.Double package java.lang >> a.printArray('hello') class java.lang.String package java.lang >> a.printArray(true) class java.lang.Boolean package java.lang >> a.printArray([2 3 4]) class [D null >> a.printArray([true false]) class [Z null 有人可以解释发生了什么。我有MATLAB R14,并且Java类的编译兼容性为1.3。
回答:
我认为原始问题已由
OP进行了
更新 ,因此,我将借此机会总结到目前为止的发现:
- 我们已经确定原始问题中的示例代码会产生预期的行为。 MATLAB将数据作为原语传递给Java,而Java对对象执行适当的自动装箱。正如Matthew Simoneau的答复所指出的那样,MATLAB在其文档的“将数据传递给Java方法 ”部分中说明了如何将其数据类型与Java数据类型进行匹配。令人惊讶的是,单个MATLAB数据类型可以按优先顺序匹配不同的Java数据类型,例如logical匹配boolean , byte , short , int , long , float和double 。
- OP最初遇到的NoSuchMethodError是由于使用错误的方法引起的。这不再是问题 。 使用double[]作为方法参数有效。
- 实际上,“奇怪的”类名称( [D和[Z )是Java用来描述基本类型数组的符号。该API解释了Class.getName()中的用法。
结案=)
更多&回答...