我有一些适用于接口的类:
这是界面:
public interface Orderable
{
    int getOrder()
    void setOrder()
}
Run Code Online (Sandbox Code Playgroud)
这是工人阶级:
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
   }
}
Run Code Online (Sandbox Code Playgroud)
这是一个实现接口的对象:
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;
    }
}
Run Code Online (Sandbox Code Playgroud)
在主要程序中,我创建了一个猫列表.我使用glazed列表在列表更改时以及使用此列表创建控件模型时动态更新控件.
目标是将此列表传输到工作对象,因此我可以在主过程中向列表中添加一些新的cat,并且工作人员将在不再设置其list属性的情况下知道它(list是main proc中的相同对象工人).但是当我把worker.setList(cats)它叫做关于期待可订购的警报时,却得到一只猫......但是Cat实现了Orderable.我该如何解决这个问题? …
如何在Java中执行此操作 - 将子类型集合传递给需要基类型集合的方法?
以下示例给出:
The method foo(Map<String,List>) is not applicable for the arguments (Map<String,MyList>)
Run Code Online (Sandbox Code Playgroud)
我可以通过为类型化集合创建类层次结构来实现 - 但是否则可能呢?
public void testStackOverflow() {
    class MyList extends AbstractList {
        public Object get(int index) {
            return null;
        }
        public int size() {
            return 0;
        }           
    };
    Map <String, List>   baseColl = null;
    Map <String, MyList> subColl  = null;
    foo (subColl);              
}
private void foo (Map <String, List> in) {      
}
Run Code Online (Sandbox Code Playgroud)
编辑:从答案中得出结论,这需要"有界通配符",因此添加此文本以进行搜索