【问题标题】:How do I pass a Java object as a parameter to a MATLAB function?如何将 Java 对象作为参数传递给 MATLAB 函数?
【发布时间】:2009-03-19 14:51:16
【问题描述】:

我写了一个 Matlab 类来使用 JDBC 和 java.sql 中的东西来实现一个数据库。

我需要知道一个ResultSet中有多少个结果,所以我写了下面的Matlab静态函数:

methods (Static)

    function [numRecords] = numRecords(resultSet)
        numRecords = 0;
        if (~isempty(resultSet))
            row = resultSet.getRow();
            resultSet.beforeFirst();
            resultSet.last();
            numRecords = resultSet.getRow();
            resultSet.absolute(row);
        end
    end

end

但是当我尝试调用它时,我收到以下错误消息:

??? 'org.apache.derby.impl.jdbc.EmbedResultSet40' 类型的输入参数的未定义函数或方法 'numRecords'

没有其他称为 numRecords 的函数。

【问题讨论】:

    标签: java matlab


    【解决方案1】:

    当我写最初的问题时,我意识到我的错误。

    显然,在 Matlab 类中,调用静态函数需要将封闭类添加到函数之前...即使是从同一个类中调用!

    我换了行:

    trials = zeros(numRecords(rs));
    

    与

    trials = zeros(CMAPSigSimResultsDB.numRecords(rs));
    

    它奏效了。 (好吧它没有,但它至少调用了这个函数。)

    这是一个令人困惑的错误消息,因为不应键入 Matlab,但它听起来像是......

    【讨论】:

    【解决方案2】:

    您应该能够像对待任何其他变量/对象一样在 MATLAB 中处理 Java 对象。你可以像这样创建一个 Java 对象:

    myDate = java.util.Date;
    

    然后将该对象传递给函数:

    myFcn(myDate,...other input arguments...);
    

    欲了解更多信息,您可以查看MATLAB documentation。

    编辑:

    这可能不言而喻,但您应该避免为函数 myFcn 赋予与您传入的 Java 对象的任何方法相同的名称(即 重载 )。正如this other question 和my answer 所说明的那样,实际调用哪个重载函数可能会让人感到困惑。

    【讨论】:

    • 谢谢.. 现在我发布了一条推文,指出提问者回到了这个问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2018-03-15
    • 2019-07-23
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多