Matlab/Java API 回调
我正在设计一个 API(用 Java 编写),并希望用户从 Matlab 访问该 API。 问题是我希望 API 提供如下功能:
javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test);
我的 API(在后台)获取 Java Obj 的实例(通过某种机制,例如轮询) >)。 我希望此 API 方法一直阻塞,直到这些实例之一在传递给 Predicate
时计算结果为 true
。 如果我从 Java 调用这个 API,我会这样做:
javaApi.waitUntilPredicateIsTrue(new Predicate<JavaObj>() {
public boolean evaluate(JavaObj jo) {
return "READY".equals(jo.getState());
}
});
你明白了。
如何从 Matlab 内部调用它? 我可以使用 Matlab 中的匿名内部类吗? 我可以声明一个 Matlab classdef
来扩展接口 Predicate
(这可以处理 Java 通用版本)吗?
I'm designing an API (in Java) and expect to have users accessing the API from Matlab. The problem is that I want the API to provide a piece of functionality like:
javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test);
My API (in the background) gets hold of instances of Java Obj
(via some mechanism, e.g. polling). I want this API method to block until one of these instances, when passed to the Predicate
evaluates to true
. If I was calling this API from Java, I'd do:
javaApi.waitUntilPredicateIsTrue(new Predicate<JavaObj>() {
public boolean evaluate(JavaObj jo) {
return "READY".equals(jo.getState());
}
});
You get the idea.
How can this be called from within Matlab? Can I use anonymous inner classes from Matlab? Can I declare a Matlab classdef
which extends the interface Predicate
(can this cope with the Java generic version)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这听起来是一个很难回答的问题。 我仍在运行 R2006b,因此这可能已发生变化,但 MATLAB 似乎不会将函数句柄(包括匿名函数)和结构转换为 Java 对象。 我不知道 MATLAB 自定义类,因为语法已更改。 字符串、数组和元胞数组将正确翻译 。 他们根本不评论实现接口。 (:p :p :p BOO HISS)
编辑:刚刚在 Matlab Central< 上找到了此页面/a>,它讨论了一些未记录的接口。
That sounds like a tough question. I'm still running R2006b so this may have changed, but it looks like MATLAB will not translate function handles (incl. anonymous functions) and structures into Java objects. I don't know about MATLAB custom classes, since the syntax has changed. Strings, arrays, and cell arrays will translate properly. They don't comment at all on implementing interfaces. (:p :p :p BOO HISS)
edit: just found this page on Matlab Central, it talks about some undocumented interfaces.
Matlab 有一个比强迫用户创建整个类只是为了提供单一方法更好的解决方案。 看看他们的 匿名函数。
请注意,Matlab 中的匿名函数具有奇怪的作用域规则。 请务必阅读链接帮助页面的“表达式中使用的变量”部分。 如果您想要更传统的词法范围,请查看 嵌套函数。
编辑:
我假设您将从 Matlab 进行轮询,而不是将谓词函数传递给 Java。 例子:
Matlab has a much nicer solution than forcing users to create a whole class just to provide a single method. Take a look at their anonymous functions.
Note that anonymous functions in Matlab have odd scoping rules. Make sure you read the "Variables Used in the Expression" section of the linked help page. If you want more traditional lexical scoping, take a look at nested functions.
EDIT:
I am assuming that you will be doing the polling from Matlab, not passing the predicate function to Java. Example: