मैं कुछ वर्ग कि इंटरफेस के साथ काम करता है:ऑब्जेक्ट्स की सूची को इंटरफेस की सूची में कैसे परिवर्तित करें?
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
}
}
यहाँ एक उद्देश्य यह है कि इंटरफ़ेस को लागू करता है:
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;
}
}
मुख्य प्रक्रिया में मैं एक सूची बनाता हूं बिल्लियों का जब सूची बदल जाती है और जब इस सूची के साथ एक नियंत्रण मॉडल बनाया जाता है तो मैं नियंत्रण को गतिशील रूप से अद्यतन करने के लिए glazed lists का उपयोग करता हूं।
लक्ष्य इस सूची को किसी कार्यकर्ता ऑब्जेक्ट में स्थानांतरित करना है, इसलिए मैं मुख्य प्रक्रिया में सूची में कुछ नई बिल्ली जोड़ सकता हूं, और कार्यकर्ता इसकी सूची संपत्ति को फिर से सेट किए बिना इसके बारे में जानेंगे (सूची एक ही वस्तु है मुख्य proc और कार्यकर्ता में)। लेकिन जब मैं worker.setList(cats)
पर कॉल करता हूं तो यह ऑर्डर करने योग्य होने की अपेक्षा करता है, लेकिन बिल्ली प्राप्त कर रहा है ... लेकिन बिल्ली ऑर्डर करने योग्य लागू करता है। मैं इसे कैसे हल करूं?
यहां मुख्य कोड है:
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
}
यह दृष्टिकोण मेरे लिए सबसे अच्छा काम करता है क्योंकि मुझे केवल "वर्कर" विधि हस्ताक्षर बदलना है, एक सरणी की घोषणा नहीं, जिसे मैं _all_ में अपनी फाइलों में स्पर्श नहीं करना चाहता था। मैट बॉल की तुलना में आईएमओ एक और व्यवहार्य दृष्टिकोण का सुझाव दिया – Makibo