मैं एक साधारण interface
है कि मैं कुछ सुविधा के आधार पर Comparable
होना चाहते है तो बोलो और एक अलग वर्ग के किसी भी दो उदाहरण में एक अलग जटिलता होगी। प्राकृतिक आदेश एक साथ कक्षाओं के सभी उदाहरणों को 'समूह' करेगा।को लागू इंटरफ़ेस तुलनाकारक
अब मैं एक वर्ग इसी क्रम में उदाहरणों के उस वर्ग के समूह के भीतर उस वर्ग के दो उदाहरण की तुलना के लिए विशेष रूप से डिफ़ॉल्ट तुलना ओवरराइड करता है में इस इंटरफ़ेस को लागू करना चाहते हैं।
class Bacteria implements Organism {
enum Shape {ROD, ROUND, SPIRAL};
private final Shape shape;
@Override
public int compareTo(Organism other) {
if (other instanceof Bacteria)
return this.shape.compareTo((Bacteria)other.shape);
else
return Organism.super.compareTo(other);
}
}
मैं कोड के इस पैटर्न के साथ विशेष रूप से खुश नहीं हूँ: मैं निम्नलिखित पैटर्न का उपयोग एक बार इंटरफ़ेस को लागू करने वर्गों के सेट बड़ी यह काफी बनाए रखने के लिए जटिल हो जाता है हो जाता है और बार-बार कोड के बहुत सारे की आवश्यकता है और पर निर्भर करता है 'जटिलता' की एक अंतर्निहित संपत्ति। मैं आदेश को परिभाषित करने के Comparator
शैली को पसंद करता हूं।
return Comparator
.comparingInt(Organism::getComplexity)
.thenComparing(Bacteria::getShape);
स्पष्ट रूप से, मुझे लगता है कि तुलनाकारक इस तरह से काम नहीं करते: वे तैयार कर रहे हैं ताकि एक तुलनित्र भर में प्रयोग किया जाता है मैं कुछ ऐसा दिखता है जैसे का उपयोग कर Bacteria
में Comparable
लागू करने में सक्षम होना चाहते हैं एक संग्रह, प्रत्येक वस्तु के आधार पर एक अलग तुलनित्र नहीं। मैं उन्हें यहां उल्लेख नहीं करता क्योंकि वे एक संभावित समाधान हैं, लेकिन तुलनाकर्ताओं की चेनिंग शैली सुरुचिपूर्ण और पारदर्शी है। कक्षा में निर्भर करता है कि संग्रह के भीतर विभिन्न आदेशों को अनुमति देने के लिए compareTo
को परिभाषित करने के लिए एक समान रूप से सुरुचिपूर्ण तरीका है या नहीं।
यह मुझे 'तुलनाकर्ता' [जिम्मेदारी की श्रृंखला] (https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern) जैसा लगता है। –
नोट: आपके प्रकार की तुलना संक्रमणीय नहीं हो सकती है! मान लीजिए कि 'ए' जटिलता 1, आकार 2,' बी 'के साथ एक बैक्टीरिया है, जटिलता 2 के साथ एक गैर बैक्टीरिया जीव है, और 'सी' जटिलता 3, आकार 1 के साथ एक बैक्टीरिया है। ध्यान दें कि' a immibis
मैं @immibis से सहमत हूं। मुझे लगता है कि चूंकि आप वैध तुलना को परिभाषित नहीं कर रहे हैं, इसलिए सवाल सार्थक नहीं है। – ajb