4

我已经看过了,但没有看到[a b] = methods(classname)记录。我的意思是,记录了单变量输出,但没有记录双变量输出。我在 MATLAB 或未记录的 matlab 中,甚至在. 也许我错过了?

char例如,如果我用 matlab 类调用它

[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 的字符串单元格,每列代表:
    1. 'static'如果是静态的,[]否则
    2. 完全合格的返回类
    3. 方法名称
    4. 完全限定方法名
    5. 输入参数(在括号中),或者只是()
    6. '抛出fully.qualified.exception.name ',或[]

例子:

[a b] = method(java.lang.Integer);

然后,a是一个包含简单名称的 <32x1 单元格>,例如'Integer','bitCount'等。

但是,b是一个 <43x6 单元格>,包含每个函数的每个变体。例如,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)中?

4

2 回答 2

5

对于 MATLAB 自己的类(classdef样式),可以使用元数据系统获取类​​似信息:

mc = ?timer
mc.MethodList

methods您在上面显示的使用似乎对 Java 类和对象特别有用。methodsview检查内部使用两个输出的函数的源代码methods

edit methodsview

方法视图

于 2013-03-20T23:25:58.443 回答
4

Matlab 包括许多这样的无证金块,我自 2009 年以来一直在我的UndocumentedMatlab.com网站上进行记录(该网站几天前迎来了 4 岁生日)。其中大部分与 Matlab-Java 接口(我在其上写了一本书)有关,但也有许多纯 Matlab未记录的特性和函数非常有用。

就未来的 Matlab 兼容性而言,其中一些功能比其他功能更具风险。我认为第二个输出 arg 的methods风险很低。它确实是无证的,但以目前的形式存在了很长时间(至少十年,可能更久)。从 R2013a 开始,它仍然可用。正如 Amro 所说,它由内部methodsview函数使用,使用起来完全安全。

如果您有兴趣在 Matlab 中获取有关 Java 对象的信息,请考虑使用uiinspect或实用程序,它提供的信息比或checkClass多得多。两者都适用于多种类型的对象句柄和类名,包括 Java、COM、Matlab 类和 HG 句柄(HG 仅由 提供)。此处提供了的技术说明。methodsmethodsviewuiinspectcheckClassuiinspectuiinspect


uiinspect用于 Java、COM 和 Matlab 句柄: <code>uiinspect</code> 用于 Java、COM 和 Matlab 句柄


checkClass在 Java 对象或类名上使用:

<code>checkClass</code> 在 Java 对象上使用

于 2013-03-26T19:58:21.050 回答