Кажется, что переменная меняет свой тип в одну строку без причины. AnyLogi c SelectOutput не работает правильно типы работают некорректно - PullRequest
0 голосов
/ 06 мая 2020

У меня проблема с моим элементом SelectOutput. Тип ввода - «Клиент», и в коде Java это правильно отражено с параметром функции «агент», имеющим тип «Клиент». Однако, когда я обращаюсь к этому параметру «агента», это уже не тип «Клиент», а «StockItem» - еще один из моих типов агентов, который не участвует в этой блок-схеме.

Сообщение об ошибке в комментарии в коде ниже:

  private boolean _hasBought_condition_xjal( final com.anylogic.libraries.processmodeling.SelectOutput<Customer> self, Customer agent ) {
    boolean _value;
    _value = (Customer)(agent).buyingItem!=null; // <-- Error here "Description: Cannot cast from StockItem to Customer. Location: CW2_shop_2/Shop/hasBought - SelectOutput"
    return _value;
  }

Это имеет еще меньше смысла, потому что точно такое же приведение работает в поле «При вводе» под ним, вот настройка SelectOutput: enter image description here Мне нужно получить доступ к параметру агента клиента, обращающемуся к нему с помощью «agent.buyingItem», выдает ошибку, что «тип StockItem не имеет параметра buyItem», что побудило меня попробовать применить это первое, как вы видите выше. Я уже пробовал перезапустить AnyLogi c и перестроить.

Заранее спасибо.

РЕДАКТИРОВАТЬ: После того, как я обнаружил, что преобразование типа в Customer и его удаление мне не нужно, я все же обнаружил, что значения между «Condition» и «onEnter» различны. Я добавил много строк отладки, и вы можете увидеть результат на изображении ниже. Значения «agent.buyingItem! = Null», кажется, меняются. «notNull: true» выводится, но затем агент уходит через false независимо от значения.

buyItem - это переменная типа StockItem, которая является пустым агентом.

enter image description here

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Ваши скобки неверны.

(Customer)(agent).buyingItem получает buyingItem (предположительно типа StockItem), а затем пытается преобразовать , что в Customer.

Вы должны делать

((Customer) agent).buyingItem

Ваш код при входе правильный, следовательно, разные выходы.

0 голосов
/ 07 мая 2020

при условии, что вы должны сделать следующее

agent.buyingItem!=null

ваш агент уже является клиентом, поэтому нет необходимости передавать его клиенту, как вы пытаетесь сделать, и что делает (агент) вместо агента не работает и может иметь другое значение.

...