• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

java matlab混合编程之返回值Struct类型 - you Richer

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

java matlab混合编程之返回值Struct类型

java matlab混合编程的时候当返回值是Struct类型(matlab中的返回类型)如何来取得(java中)其值?

上网找,看到这个网页:http://www.mathworks.cn/cn/help/matlab/matlab_external/passing-data-to-a-java-method.html ,上面说Struct类型不支持;如下图:


然后我就没办法了,但是获得的Object值应该是可以设置断点操作的吧,然后我就设置断点来看到到底是个什么值?如下图:


不过好像没有啥属性的,那怎么取得值呢?看到右边MWStructArray,这个类,这个是javabuilder.jar里面的,这个可能会有用,好吧,先把这个值取出来,转换为MWStructArray;如下代码:

 

TestDemo td=new TestDemo();
Object[] result=td.testFun(6,data);
MWStructArray msa=(MWStructArray)result[5];

然后使用msa加一个点,来智能提示看它有哪些方法,如下:

 

看到有一个fieldNames()方法,试验了一下这个方法返回的是一个Struct对象的全部属性。很好,那么如何获得呢,在往下看,有一个get()方法,输入可以使int,int[]。再次试验,发现get(1)就是第一个属性,但是我想如果可以直接get(paraName)不是更好么,无奈,好像没有这个方法。不过可以使用一个map来映射,然后直接通过字符串来获得值也是可以的,如下;

 

MWStructArray msa=(MWStructArray)result[5];
	
		Map<String,Integer> fieldsMap=new HashMap<String,Integer>();
		String[] fields =msa.fieldNames();
		for(int i=0;i<fields.length;i++){
		//	System.out.print(fields[i]+",");
			fieldsMap.put( fields[i],i);
		}
		System.out.println();
		Object beta=msa.get(fieldsMap.get("beta"));
		MWNumericArray betaA=(MWNumericArray)beta;

这样就可以取出Struct的属性值了,最后一行代码是把属性值进行转换,因为属性值是一个数组;

 


分享,成长,快乐

转载请注明blog地址:http://blog.csdn.net/fansy1990



posted on 2013-09-09 19:11  you Richer  阅读(502)  评论(0编辑  收藏  举报

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap