poster
2019-12-10, 16:49
我有一些需要相互交谈的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 (https://stackoverflow.com/questions/464216/strange-classes-passed-from-matlab-to-java#466400)进行了更新 (https://stackoverflow.com/questions/464216/strange-classes-passed-from-matlab-to-java#466400) ,因此,我将借此机会总结到目前为止的发现:
我们已经确定原始问题中的示例代码会产生预期的行为。 MATLAB将数据作为原语传递给Java,而Java对对象执行适当的自动装箱。正如Matthew Simoneau的答复 (https://stackoverflow.com/questions/464216/strange-classes-passed-from-matlab-to-java#466086)所指出的那样,MATLAB在其文档的“将数据传递给Java方法 (http://www.mathworks.com/help/matlab/matlab_external/passing-data-to-a-java-method.html) ”部分中说明了如何将其数据类型与Java数据类型进行匹配。令人惊讶的是,单个MATLAB数据类型可以按优先顺序匹配不同的Java数据类型,例如logical匹配boolean , byte , short , int , long , float和double 。
OP最初遇到的NoSuchMethodError是由于使用错误的方法引起的。这不再是问题 (https://stackoverflow.com/questions/464216/strange-classes-passed-from-matlab-to-java#466400) 。 使用double[]作为方法参数有效。
实际上,“奇怪的”类名称( [D和[Z )是Java用来描述基本类型数组的符号。该API解释了Class.getName()中 (http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getName())的用法。
结案=)
更多&回答... (https://stackoverflow.com/questions/464216)
因此,我编写了一个简单的“ 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 (https://stackoverflow.com/questions/464216/strange-classes-passed-from-matlab-to-java#466400)进行了更新 (https://stackoverflow.com/questions/464216/strange-classes-passed-from-matlab-to-java#466400) ,因此,我将借此机会总结到目前为止的发现:
我们已经确定原始问题中的示例代码会产生预期的行为。 MATLAB将数据作为原语传递给Java,而Java对对象执行适当的自动装箱。正如Matthew Simoneau的答复 (https://stackoverflow.com/questions/464216/strange-classes-passed-from-matlab-to-java#466086)所指出的那样,MATLAB在其文档的“将数据传递给Java方法 (http://www.mathworks.com/help/matlab/matlab_external/passing-data-to-a-java-method.html) ”部分中说明了如何将其数据类型与Java数据类型进行匹配。令人惊讶的是,单个MATLAB数据类型可以按优先顺序匹配不同的Java数据类型,例如logical匹配boolean , byte , short , int , long , float和double 。
OP最初遇到的NoSuchMethodError是由于使用错误的方法引起的。这不再是问题 (https://stackoverflow.com/questions/464216/strange-classes-passed-from-matlab-to-java#466400) 。 使用double[]作为方法参数有效。
实际上,“奇怪的”类名称( [D和[Z )是Java用来描述基本类型数组的符号。该API解释了Class.getName()中 (http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getName())的用法。
结案=)
更多&回答... (https://stackoverflow.com/questions/464216)