Matlab/javaapi回调

Matlab/javaapi回调,java,matlab,anonymous-class,Java,Matlab,Anonymous Class,我正在设计一个API(Java),希望用户能够从Matlab访问API。问题在于,我希望API提供如下功能: javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test); 你明白了 如何从Matlab中调用它?我可以使用Matlab中的匿名内部类吗?我可以声明一个Matlabclassdef来扩展接口谓词(这能处理Java通用版本吗) Matlab有一个比仅仅为了提供一个方法而强迫用户创建整个类更好的解决方案。看看他们的照片

我正在设计一个API(Java),希望用户能够从Matlab访问API。问题在于,我希望API提供如下功能:

javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test);
你明白了


如何从Matlab中调用它?我可以使用Matlab中的匿名内部类吗?我可以声明一个Matlab
classdef
来扩展接口
谓词
(这能处理Java通用版本吗)

Matlab有一个比仅仅为了提供一个方法而强迫用户创建整个类更好的解决方案。看看他们的照片

请注意,Matlab中的匿名函数具有奇怪的作用域规则。确保阅读链接帮助页面的“表达式中使用的变量”部分。如果你想要更传统的词汇范围,请看一看

编辑: 我假设您将从Matlab进行轮询,而不是将谓词函数传递给Java。例如:

function waitForPredicate(pred)
  while pred
  end
end

waitForPredicate(@()javaApi.isMyConditionMet());

这听起来是个棘手的问题。我仍然在运行R2006b,所以这可能已经改变,但看起来MATLAB不会将函数句柄(包括匿名函数)和结构转换为Java对象。我不知道MATLAB自定义类,因为语法已经改变了。字符串、数组和单元格数组。他们对接口的实现没有任何评论。(:p:p:p嘘)


编辑:刚在上找到此页面,它讨论了一些未记录的界面。

不幸的是,没有;我正在努力使我的API更容易用于最常见的用例和Matlab。基本上,API用于访问(Java)对象。但是,从用户的角度来看,对象可能还没有“准备好”。我希望提供一个简单的waitUntilXIsReady机制,而不是自己实现轮询逻辑。您的建议的问题在于API上没有“isMyConditionMet”。Matlab最终用户需要决定他是否对itI满意。我还应该说“轮询逻辑”比简单地在“!conditionIsMet”上旋转更复杂,在两者之间睡一会儿(尽管你可以这样做)。这是因为可以为您准备对象的更新版本(它通过发布到多播组的事件推出)。我真的不想让我的Matlab用户乱搞原始的多播!
function waitForPredicate(pred)
  while pred
  end
end

waitForPredicate(@()javaApi.isMyConditionMet());