Anylogi c: объявить параметр типа ArrayList - PullRequest
2 голосов
/ 06 апреля 2020

Я создаю класс (извините - Агент), который будет работать с набором объектов Tank (Fluid Library) - для таких вещей, как мониторинг отдельных уровней или общего уровня всех резервуаров, создание отчетов по уровням и инициирование действий на основе уровней - вещи такого рода. Ради аргумента давайте назовем его агентом «TankMonitor».
В идеале я хотел бы иметь возможность определить параметр в моем агенте «TankMonitor», который позволяет мне определять интересующие танки, когда я размещаю TankMonitor в main. Я попытался определить тип параметра как Другой - ArrayList<Tank>, однако я не знаю, как настроить следующий шаг, чтобы позволить мне заполнять ArrayList of Tanks, когда я помещаю экземпляр этого агента в main. Я предпочел бы иметь элемент управления типа списка для заполнения ArrayList - очень похоже на то, как блок AnyLogi c Seize позволяет вам выбирать из нескольких пулов ресурсов на выбор.

Кто-нибудь пытался сделать это раньше и был успешным?

Ответы [ 2 ]

4 голосов
/ 08 апреля 2020

В дополнение к идеальному ответу Бенджамина я бы просто добавил обходной путь вручную, который здесь не нужен, но может быть полезен, когда рассматриваемый параметр имеет более сложную структуру, чем покрытые предварительно созданными элементами управления, скажем, списком списков, карты и т. п.

В таком случае тип элемента управления по-прежнему является текстовым, и заполнение его в экземпляре происходит путем указания его на новый объект типа параметра. Например, для параметра ArrayList<Tank> вы можете создать новый объект ArrayList, который вы заполняете списком объектов следующим образом: new ArrayList<Tank>(Arrays.asList(tankA, tankB))

В коде Java все, что записано в это текстовое поле будет находиться справа от оператора присваивания параметров в функции автоматического создания параметров встроенного экземпляра агента. Поэтому код с несколькими операторами не будет работать в этом месте. Вместо этого, если процесс создания значения параметра не укладывается аккуратно в одно выражение, вы можете скрыть код в функции, которая возвращает желаемый объект, и вызвать его из текстового поля параметра.

4 голосов
/ 06 апреля 2020

Это возможно следующим образом:

  1. Измените тип на «Другой», а затем «Танк []», т. Е. Массив танков
  2. Измените тип управления на « одномерный массив "

Пример ниже. Теперь у вас есть тот же пользовательский интерфейс для предварительного определения резервуаров во время разработки для вашего экземпляра агента.

enter image description here

...