tengo alguna clase que trabaja con interfaces:¿Cómo convertir la lista de objetos a la lista de interfaces?
Aquí está la interfaz:
public interface Orderable
{
int getOrder()
void setOrder()
}
Aquí está la clase trabajadora:
public class Worker
{
private List<Orderable> workingList;
public void setList(List<Orderable> value) {this.workingList=value;}
public void changePlaces(Orderable o1,Orderable o2)
{
// implementation that make o1.order=o2.order and vice versa
}
}
Aquí es un objeto que implementa la interfaz:
public class Cat implements Orderable
{
private int order;
public int getOrder()
{
return this.order;
}
public void setOrder(int value)
{
this.order=value;
}
public Cat(String name,int order)
{
this.name=name;
this.order=order;
}
}
En el procedimiento principal, creo una lista de gatos Uso glazed lists para actualizar dinámicamente los controles cuando se cambia la lista y cuando se crea un modelo de control con esta lista.
El objetivo es transferir esta lista a un objeto de trabajo, por lo que puedo agregar un nuevo gato a la lista en el procedimiento principal, y el trabajador lo sabrá sin establecer su propiedad de lista nuevamente (la lista es el mismo objeto en proc principal y en trabajador). Pero cuando llamo al worker.setList(cats)
, alerta sobre la posibilidad de esperar un Orderable, pero obteniendo un Cat ... pero Cat implementa Orderable. ¿Cómo puedo solucionar esto?
Este es el código principal:
void main()
{
EventList<Cat> cats=new BasicEventList<Cat>();
for (int i=0;i<10;i++)
{
Cat cat=new Cat("Maroo"+i,i);
cats.add(cat);
}
Worker worker=new Worker();
worker.setList(cats); // wrong!
// and other very useful code
}
Este enfoque funcionó mejor para mí ya que solo tengo que cambiar la firma del método "Trabajador", no la declaración de una matriz, que no quería tocar en _todos mis archivos. OMI un enfoque más factible que la respuesta sugerida de Matt Ball – Makibo