Java 如何将对象列表转换为接口列表?

Java 如何将对象列表转换为接口列表?,java,interface,casting,glazedlists,Java,Interface,Casting,Glazedlists,我有一些与接口一起工作的类: 以下是界面: public interface Orderable { int getOrder() void setOrder() } public class Cat implements Orderable { private int order; public int getOrder() { return this.order; } public void setOrder(int

我有一些与接口一起工作的类:

以下是界面:

public interface Orderable
{
    int getOrder()
    void setOrder()
}
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;
    }
}
这是工人阶级:

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
   }
}
在主程序中,我创建了一个猫的列表。当列表更改以及使用此列表创建控件模型时,我使用动态更新控件

目标是将此列表传输到worker对象,以便我可以在主过程中向列表添加一些新的cat,并且worker将知道它,而无需再次设置其list属性(list与main proc和worker中的对象相同)。但是,当我调用
worker.setList(cats)
时,它会发出警报,提示您需要一个订单,但需要一个Cat。。。但是Cat实现了有序的。我如何解决这个问题

以下是主要代码:

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
}
void main()
{
EventList cats=新的基本事件列表();

对于(int i=0;i如果您只是更改
cats
的声明,它应该可以工作:

List<? extends Orderable> cats = new BasicEventList<? extends Orderable>();

for (int i=0; i<10; i++)
{
   cats.add(new Cat("Maroo"+i, i));
}

Worker worker = new Worker(); 
worker.setList(cats);

List您需要更改
Worker
类,以便它接受
List
void main()
{
EventList cats=新的基本事件列表();

如果你真的想要一个接口类型的新集合,比如你不拥有你正在调用的方法

//worker.setList(cats); 
worker.setList( new ArrayList<Orderable>(cats)); //create new collection of interface type based on the elements of the old one
//worker.setList(cats);
setList(new ArrayList(cats));//基于旧集合的元素创建接口类型的新集合

这种方法最适合我,因为我只需要更改“Worker”方法签名,而不是数组声明,我不想在所有文件中都涉及数组声明。我认为这是一种比Matt Ball建议的答案更可行的方法
void main()
{
    EventList<Orderable> cats = new BasicEventList<Orderable>();

    for (int i=0;i<10;i++)
    {
        Cat cat=new Cat("Maroo"+i,i);
        cats.add(cat);
    }

    Worker worker=new Worker(); 
    worker.setList(cats); // should be fine now!
    // and other very usefull code
}
//worker.setList(cats); 
worker.setList( new ArrayList<Orderable>(cats)); //create new collection of interface type based on the elements of the old one