Je suis en train de concevoir une API (en Java) et je m'attends à ce que les utilisateurs accèdent à l'API depuis Matlab. Le problème est que je veux l'API pour fournir un morceau de fonctionnalités telles que:Rappel API Matlab/Java
javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test);
Mon API (en arrière-plan) se saisit des instances de Java Obj
(via un mécanisme, par exemple interrogation). Je souhaite que cette méthode API se bloque jusqu'à ce que l'une de ces instances, lorsqu'elle est transmise au Predicate
, évalue à true
. Si j'appelais cette API de Java, je ferais:
javaApi.waitUntilPredicateIsTrue(new Predicate<JavaObj>() {
public boolean evaluate(JavaObj jo) {
return "READY".equals(jo.getState());
}
});
Vous avez l'idée. Comment cela peut-il être appelé à partir de Matlab?
Comment cela peut-il être appelé depuis Matlab? Puis-je utiliser des classes internes anonymes de Matlab? Puis-je déclarer un Matlab classdef
qui étend l'interface Predicate
(cela peut-il faire face à la version générique de Java)?
Malheureusement pas; J'essaie de rendre mon API plus facile à utiliser pour les cas d'utilisation les plus courants et de Matlab. Fondamentalement, l'API est utilisée pour accéder aux objets (Java). Cependant, l'objet peut ne pas être "prêt" du point de vue de l'utilisateur. Plutôt que d'implémenter eux-mêmes la logique d'interrogation, j'espérais fournir un mécanisme waitUntilXIsReady simple. Le problème avec votre suggestion est qu'il n'y a pas de "isMyConditionMet" sur l'API. C'est l'utilisateur final de Matlab qui doit décider s'il est content –
Je devrais aussi dire que la "logique d'interrogation" est plus compliquée que de simplement tourner sur "! ConditionIsMet", en dormant un peu entre les deux (bien que vous puissiez le faire cette). En effet, une version plus récente de l'objet pourrait être prête pour vous (elle est rejetée via un événement publié dans un groupe de multidiffusion). Je ne veux vraiment pas que mes utilisateurs de Matlab se tromper avec la multidiffusion brute! –