Вопрос

Я разрабатываю API (на Java) и ожидаю, что пользователи будут получать доступ к API из Matlab.Проблема в том, что я хочу, чтобы API предоставлял часть функциональности, такую как:

javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test);

Мой API (в фоновом режиме) получает доступ к экземплярам Java Obj (с помощью некоторого механизма, например опрос).Я хочу, чтобы этот метод API блокировался до тех пор, пока один из этих экземпляров, когда передается в Predicate оценивает, чтобы true.Если бы я вызывал этот API из Java, я бы сделал:

javaApi.waitUntilPredicateIsTrue(new Predicate<JavaObj>() {
    public boolean evaluate(JavaObj jo) {
        return "READY".equals(jo.getState());
    }
});

Вы уловили идею.

Как это можно вызвать из Matlab? Могу ли я использовать анонимные внутренние классы из Matlab?Могу ли я объявить Matlab classdef который расширяет интерфейс Predicate (может ли это справиться с универсальной версией Java)?

Это было полезно?

Решение

Это звучит как непростой вопрос.Я все еще использую R2006b, так что это могло измениться, но, похоже, MATLAB не будет переводить дескрипторы функций (вкл.анонимные функции) и структуры в объекты Java.Я не знаю о пользовательских классах MATLAB, так как синтаксис изменился.Строки, массивы и массивы ячеек переведет должным образом.Они вообще не комментируют реализацию интерфейсов.(:пи :пи : ПИ-БУ-ШИПЕНИЕ)

Редактировать:только что нашел эту страницу на Matlab Центральный, в нем говорится о некоторых недокументированных интерфейсах.

Другие советы

У Matlab есть гораздо более приятное решение, чем заставлять пользователей создавать целый класс только для того, чтобы предоставить один метод.Взгляните на их анонимные функции.

Обратите внимание, что анонимные функции в Matlab имеют нечетные правила определения области видимости.Убедитесь, что вы прочитали раздел "Переменные, используемые в выражении" на связанной странице справки.Если вам нужен более традиционный лексический охват, взгляните на вложенные функции.

Редактировать: Я предполагаю, что вы будете выполнять опрос из Matlab, а не передавать функцию предиката в Java.Пример:

function waitForPredicate(pred)
  while pred
  end
end

waitForPredicate(@()javaApi.isMyConditionMet());
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top