我有一些MATLAB代码和一些需要相互通信的Java代码.我得到了NoSuchMethodError.当我将MATLAB双数组传递给接受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兼容性.
解决方法:
我认为最初的问题是updated by the OP,所以我将借此机会总结我们迄今为止的发现:
>我们已经确定原始问题中的示例代码产生了预期的行为. MATLAB将数据作为基元传递给Java,Java对对象执行适当的自动装箱.正如在Matthew Simoneau’s reply中指出的那样,MATLAB在其文档的“Passing Data to a Java Method”部分解释了它如何将其数据类型与Java数据类型相匹配.令人惊讶的是,单个MATLAB数据类型可能匹配不同的Java数据类型,例如逻辑匹配boolean,byte,short,int,long,float和double,按优先顺序排列.
> OP最初遇到的NoSuchMethodError是由使用错误的方法引起的.这是no longer a problem.使用double []作为方法参数有效.
>“奇怪的”类名([D和[Z])实际上是Java用来描述基本类型数组的符号. API解释了Class.getName()中的用法.
案例结束=)
标签:java,matlab
来源: https://codeday.me/bug/20190607/1193208.html