Есть ли простой способ создать список объектов подкласса из списка объектов суперкласса?
У меня есть набор объектов агента (суперкласс).
Объектами агента могут быть: 1) зараженный (расширяющий агент) и 2) исправный (расширяющий агент). Пример...
public class Healthy extends Agent
public class Infected extends Agent
Каждый объект Agent x хранит список всех объектов Agent y, которые вступили в контакт с Agent x, независимо от подкласса. Тип списка - "Агент", и этот список является переменной экземпляра с именем "links". Пример...
public class Agent {
protected Context<Object> context;
protected Geography<Object> geog;
private int Id;
public Coordinate location;
public ArrayList<Agent> links = new ArrayList<>();
public ArrayList<Healthy> healthy_links = new ArrayList<>();
public Agent(Context<Object> context, Geography<Object> geog) {
this.context = context;
this.geog = geog;
this.Id = Id;
this.location = location;
this.links = links;
this.healthy_links = healthy_links;
}
}
//getters and setters
public void findContacts(){
Context context = ContextUtils.getContext(this);
//create a list of all agents
IndexedIterable<Agent> agents = context.getObjects(Agent.class);
for(Agent a: agents){
//if any of the agents are in the same location as this, if the links list doesnt already contain the agent, and if the agent is not this, then add it to the links list
if(a.getLocation()== this.getLocation() && !this.links.contains(a) && this != a){
this.links.add(a); //this is obviously possible//
this.healthy_links.add(a); //this is obviously not possible, but is there a super simple alternative
}
}
}
Есть ли простой способ просмотреть список объектов Agent y и отсортировать всех здоровых агентов в новый список с именем "healthy_links" типа Healthy?
1 ответ
Решение
if (a instanceof HealthyAgent) {
this.healthy_links.add((HealthyAgent)a);
}