Tôi có một số lớp học làm việc với giao diện:Làm thế nào để chuyển đổi danh sách các đối tượng thành danh sách giao diện?
Dưới đây là giao diện:
public interface Orderable
{
int getOrder()
void setOrder()
}
Đây là giai cấp công nhân:
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
}
}
Dưới đây là một đối tượng mà thực hiện giao diện:
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;
}
}
Trong quy trình chính, tôi tạo danh sách mèo. Tôi sử dụng glazed lists để tự động cập nhật các điều khiển khi danh sách được thay đổi và khi mô hình điều khiển được tạo với danh sách này.
Mục đích là chuyển danh sách này sang đối tượng công nhân, vì vậy tôi có thể thêm một số mèo mới vào danh sách trong quy trình chính và nhân viên sẽ biết về nó mà không cần thiết lập lại danh sách của nó (danh sách là cùng một đối tượng proc chính và công nhân). Nhưng khi tôi gọi worker.setList(cats)
, cảnh báo về việc mong đợi một Orderable, nhưng nhận được một con mèo ... nhưng Cat thực hiện Orderable. Tôi giải quyết điều này như thế nào?
Đây là mã chính:
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
}
Cách tiếp cận này phù hợp nhất với tôi vì tôi chỉ phải thay đổi chữ ký "Công nhân" chứ không phải khai báo mảng mà tôi không muốn chạm vào _all_ tệp của mình. IMO một cách tiếp cận khả thi hơn so với câu trả lời được đề xuất của Matt Ball – Makibo