Art*_*sov 37 java casting interface glazedlists
我有一些适用于接口的类:
这是界面:
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.我该如何解决这个问题?
这是主要代码:
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
}
Run Code Online (Sandbox Code Playgroud)
Sai*_*ali 54
您需要更改Worker类以使其接受List<? extends Orderable>
public class Worker
{
private List<? extends Orderable> workingList;
public void setList(List<? extends Orderable> value) {this.workingList=value;}
public void changePlaces(Orderable o1,Orderable o2)
{
// implementation that make o1.order=o2.order and vice verca
}
}
Run Code Online (Sandbox Code Playgroud)
如果您只是更改以下声明,它应该可以工作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);
Run Code Online (Sandbox Code Playgroud)
看到:
如果你真的想要一个新的接口类型集合.例如,您不拥有您正在调用的方法.
//worker.setList(cats);
worker.setList( new ArrayList<Orderable>(cats)); //create new collection of interface type based on the elements of the old one
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28742 次 |
| 最近记录: |