我刚刚发现,当从 Matlab 调用 Java 时
object.method(arg1,...,argn)
相当于
method(object, arg1,...,argn)
这里的问题是我也有一个method.m
它做了一些从 Java 到 Matlab 的转换(例如,将 String[]
转换为字符串单元格)。我的method.m
看起来像
function result = method(object, arg1,...argn)
intermediate = object.method(arg1,...argn);
result = translate(intermediate);
当我调用 method(object, arg1,...,argn)
时发生的事情,它直接进行 Java 调用,而不是使用我的 method.m
修复很简单,只要不要对我的 Java 方法和我的 .m
使用相同的方法名称即可。文件。 但是还有别的办法吗?我如何知道同名的方法将被调用?有没有办法确保我调用 method.m
而不是Java方法?很容易确保调用Java方法,只需使用 object.method
语法。
顺便说一句,同样愚蠢的是 .m
编辑器链接到 method.m
关于method(object, arg1,...,argn)
调用,而调试时调用 Java 方法。
最佳答案
您可能会遇到 MATLAB 如何调度的一些问题...
我如何知道同名的方法将被调用?
This section MATLAB 文档讨论了在存在多个同名函数的情况下如何选择函数。文档中:“函数优先顺序根据函数类型及其在 MATLAB 路径上的位置确定一个函数相对于另一个函数的优先级。”此顺序(从最高到最低)如下:
- 子功能
- 私有(private)函数
- 类构造函数
- 重载方法
- 当前目录下的函数
- 在路径上的其他地方发挥作用
“method.m”函数的位置可能会决定在使用“method(object,...)”语法时是否调用它或调用 Java 方法。
有没有办法确保我调用method.m而不是Java方法?
现在,我猜测您的“method.m”位于当前目录或路径上的其他位置(两个最低优先级位置)。如果您将“method.m”设为 subfunction在调用它的较大代码中,或者是否可以将其放入 private directory 中如果它可以被每个需要调用它的函数调用,那么当您使用“方法(对象,...)”语法时,它可能会被调用而不是 Java 方法。
希望这有帮助!
关于java - 从 Matlab 调用 Java 时如何避免歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/656014/