java - matlab:查找java对象数组的长度

标签 java matlab

我有一个带有 length() 方法的 java 对象(我们称它为 Foo)。

在 MATLAB 中,我想编写一个函数来接受这些对象的数组并使用它。我的问题是通常写循环的方法失效了:

function doSomething(someArray)
    for i = 1:length(someArray)
        % do stuff with someArray(i)
    end

因为在这种情况下 MATLAB 决定“哦,那是一个 Java 对象;length(x) 应该被解释为 x.length() 因为它有一个长度( )方法:

function printLength(someArray)
disp(length(someArray));

    ...

> foo = %%% get my handle to the Java Foo object %%%
> printLength([foo foo foo])
3
> printLength([foo foo])
2
> printLength([foo])
300000
% foo.length() gets called and returns 300000 or whatever

有办法解决这个问题吗?

最佳答案

您可以使用 builtin() 强制 Matlab 使用它自己的 length()、numel() 或任何函数,而忽略 Java 类的同名方法。大多数时候调用 isscalar() 或 numel() 都可以,因为 Java 类往往不使用这些名称定义方法。但如果他们这样做,您将获得 Java 方法并遇到与 length() 相同的问题。使用 builtin() 会更通用,无论 Java 类有什么方法都可以工作。

>> foo = java.lang.String('foo');
>> builtin('length', [foo foo])
ans =
     2
>> builtin('length', [foo])
ans =
     1
>> length([foo])
ans =
     3
>> 

你可以这样包装它。

function out = mlength(x)
%MLENGTH Array length, ignoring Java length() methods

% Test for isjava to avoid ignoring overriden length() methods in Matlab objects
if isjava(x)
   out = builtin('length', x);
else
   out = length(x);
end

关于java - matlab:查找java对象数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3118210/

相关文章:

c++ - 从 C++ dll 返回数组到 matlab

java - 如果读取字母而不是数字,如何设置语句?

java - 从 Java 应用程序提交 ASP 表单

matlab - 如何使用带有非矩形域的 surf() 命令绘制矩阵

matlab - 在 matlab 中,如何生成 1 :n in a matrix form without using loop ? 例如当 n=6 时,我想要 [1 2;3 4;5 6] 而不是 [1 2 3 4 5 6]

matlab - 根据函数值差异进行采样

matlab - 用样条勾勒出你的手(Matlab)

java - 从不同类的 JFrame 中删除 JPanel(并添加一个新类)

java - 我应该如何模拟我要测试的对象内的单个方法?

java - apache httpclient 有没有办法根据 URI 设置凭据