我看了一遍,但没有看到记录[a b] = methods(classname)
。我的意思是,记录单变量输出,但不记录双变量输出。我在MATLAB或未记录的matlab中看不到任何文档,或者甚至在这里。也许我错过了它?
如果我用matlab类调用它,例如char
[a b] = methods(char);
然后a
是char的方法列表,b
是[]
但是......
对于java类,b
具有一些有用的值。假设javaClass
是java类或java类名。
通常,我会拨打a = method(javaClass)
或a = method(javaClass,'-full')
。但是,我注意到我也可以打电话
[a b] = method(javaClass)
当我这样做时:
a
是一个包含所有类方法名称的唯一列表的单元格。 (正如预期的那样)b
是一个N x 6个字符串单元格,每列代表:
'static'
如果是静态,则[]
否则()
[]
示例:
[a b] = method(java.lang.Integer);
然后,a
是< 32x1 cell>包含简单名称,例如'Integer'
,'bitCount'
等
但是,b
是<43x6单元&gt;包含每个函数的每个变体。例如,valueOf函数之一将显示
COL VALUE
1. static
2. java.lang.Integer
3. valueOf
4. java.lang.Integer.valueOf
5. (java.lang.String)
6. throws java.lang.NumberFormatException`
主要问题:使用这完全不安全吗?因为它没有证件,我会这么认为;但是它为我提供了一些内置的功能,不用复制就可以了。解析的解决方法并不可恶,但此功能已经存在。
这是从哪里来的?也就是说,这实际上是来自MATLAB函数,还是它正在使用的某些Java函数?
有没有人使用它?或者(如在主要问题中)应该避免吗?
有关于此的文件吗?除了这篇文章,我的意思是。我的意思是,当然,它似乎是一个直接的功能......对于任何重要的人来说,这是否足够有趣?
我在MATLAB 2011b上,这个功能在MATLAB(2013a)的更高版本中是否仍然存在?
答案 0 :(得分:5)
对于MATLAB自己的类(classdef
样式),您可以使用metadata system获取类似信息:
mc = ?timer
mc.MethodList
使用上面显示的methods
似乎对Java类和对象特别有用。检查methodsview
函数的源代码,该函数在内部使用methods
的两个输出。
edit methodsview
答案 1 :(得分:4)
Matlab包括许多此类无证件的掘金,我自2009年以来就在我的UndocumentedMatlab.com网站上进行了记录(该网站几天前已经过了4岁生日)。其中大部分都与Matlab-Java接口有关(我在其上写了book),但也有许多pure-Matlab未记录的特性和功能非常有用。
在未来的Matlab兼容性方面,其中一些功能比其他功能更具风险。我认为methods
的第二个输出arg是低风险的。它确实没有文档记录,但已经存在了它的当前形式多年(至少十年,可能更多)。它仍然可用于R2013a。正如Amro所说,它由内部methodsview
函数使用,并且完全可以安全使用。
如果您有兴趣在Matlab中获取有关Java对象的信息,请考虑使用提供比methods
或{{1}更多信息的uiinspect
或checkClass
实用程序。 }。 methodsview
和uiinspect
都处理多种类型的对象句柄和类名,包括Java,COM,Matlab类和HG句柄(只有checkClass
的HG)。提供了uiinspect
的技术说明here。
uiinspect
处理:
uiinspect
用于Java对象或类名: