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