Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 从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。


回答:
我认为原始问题已由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()中的用法。
结案=)



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:45


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.