Я понял, что могу вставить разные типы агентов в один и тот же блок, изменив тип агента во всем процессе на общий Agent
(работает хорошо, благодаря Эми). снимок
Но я застрял на том, как вытащить их с помощью ручного литья для процесса selectOutputIn1
.Каждый тип агента имеет параметр с именем p_new_location
с типом SelectOutputOut
.
Что мне нужно, чтобы помочь
передать то, что эквивалентно agent.p_new_location
, если правильно произнесено через selectOutputIn1
.
Что я пытался
, создаваяфункция с ручным приведением:
if( agent instanceof Wife){
return ((Wife)agent).p_new_location ;
} else if(agent instanceof Child_M){
return ((Child_M)agent).p_new_location ;
} else if(agent instanceof Child_F){
return ((Child_F)agent).p_new_location ;}
как это выглядит с ошибкой
К сожалению, как вы можете видеть, есть ошибка, говорящая, что метод должен вернуть результаттипа SelectOutputOut, хотя он уже определен.
Тип параметра в каждом классе выглядит точно так же, как this .А внутри симуляции это выглядит как this перед передачей значения и как this после передачи значения.Кроме того, Я заметил, что значение необычного типа параметра, такого как SelectOutputOut
, не отображается во время симуляции , как показано здесь .Как вы можете видеть, параметры (age
, countDb
и taken
) все вместе со своими значениями, но не p_new_location
.
Решение
Спасибо Эми снова:)
Компилятор видит if / else if / else if.Что если ничего из этого не правда?Если ваш последний вариант if является единственным, просто измените его на else или вставьте соответствующий код для того, что вы хотите сделать.
Вот как теперь выглядит код
if( agent instanceof Wife){
return ((Wife)agent).p_new_location ;
} else if(agent instanceof Child_M){
return ((Child_M)agent).p_new_location ;
} else{
return ((Child_F)agent).p_new_location ;}
Спасибо inAdvance;