2012-01-20 17 views
8

अगर मैं एक वर्ग Person कि Comparable लागू करता है (personB.height को personA.height तुलना, उदाहरण के लिए), यह संभवजावा - compareTo और ऑपरेटरों

personA.compareTo(personB) == -1? 

के लिए एक विकल्प के रूप में

personA < personB 

उपयोग करने के लिए है क्या ऐसा करने में कोई समस्या है या क्या मुझे ऑपरेटरों को अधिभारित करने की आवश्यकता है?

उत्तर

6

जावा में कोई ऑपरेटर ओवरलोडिंग नहीं है। आप शायद सी ++ पृष्ठभूमि से आते हैं।

आपको compareTo विधि का उपयोग करना होगा।

14

नहीं, personA < personB को एक विकल्प के रूप में उपयोग करना संभव नहीं है। और आप जावा में ऑपरेटरों को अधिभारित नहीं कर सकते हैं।

इसके अलावा, मैं

personA.compareTo(personB) == -1 

बदलने की सलाह देते होता

personA.compareTo(personB) < 0 

क्या आप अब शायद अपने वर्ग के लिए काम करता है। हालांकि, compareTo() पर अनुबंध यह है कि यह एक नकारात्मक मान देता है जब personApersonB से कम है। वह ऋणात्मक मान -1 होना आवश्यक नहीं है, और यदि अलग वर्ग के साथ उपयोग किया जाता है तो आपका कोड टूट सकता है। यदि कोई आपकी कक्षा की compareTo() विधि को अलग-अलग करने के लिए बदल रहा था - लेकिन फिर भी अनुपालन - कार्यान्वयन।

1

जावा में ऑपरेटर ओवरलोडिंग नहीं है, इसलिए, हाँ, कोई समस्या है: यह संभव नहीं है।


वहाँ निश्चित रूप से, कर रहे हैं, में ही बनाई गई कुछ overloadings: + ऑपरेटर, अभिन्न प्रकार पर काम करता है फ्लोटिंग प्वाइंट प्रकार, और String रों पर। लेकिन आप अपना खुद का परिभाषित नहीं कर सकते हैं।

5

यह संभव नहीं है, नहीं; और जावा ऑपरेटर अधिभार (अंतर्निहित ओवरलोड के अलावा) का समर्थन नहीं करता है।

वैसे, == -1 लिखने के बजाय, आपको < 0 लिखना चाहिए। compareTo को केवल नकारात्मक/शून्य/सकारात्मक मान वापस करने की आवश्यकता है, विशेष रूप से -1/0/1 नहीं।

1

नहीं, वस्तुओं पर लागू होने पर "<" संकलित नहीं होगा। इसके अलावा, अपने परीक्षण के लिए सावधान रहना:

personA.compareTo(personB)==-1 

एपीआई डॉक्स केवल का कहना है कि compareTo() एक नकारात्मक पूर्णांक लौटाता है जब वस्तु निर्दिष्ट वस्तु है, जो जरूरी -1 नहीं होगा की तुलना में कम है।

personA.compareTo(personB) < 0 

का उपयोग करें।

1

यह उचित नहीं है, जावा आपको ऑपरेटर अधिभार नहीं देता है।
लेकिन एक और अधिक OO विकल्प IMHO यह अधिक पठनीय है क्योंकि यह खाल है, इसलिए बजाय व्यक्ति

public boolean isTallerThan(Person anotherPerson){ 
    return this.compareTo(anotherPerson) > 0; 
} 

के अंदर एक विधि जोड़ने का

if(personA.compareTo(personB) > 0){ 

} 

लिखने की आप

if(personA.isTallerThan(personB)){ 

} 

लिख सकते हैं विवरण और यह जावा विनिर्देशों के बजाय डोमेन भाषा में व्यक्त किया जाता है।

+0

+1 मैं 'isTallerThan' से सहमत हूं, मैं बस यही सोच रहा था। –

संबंधित मुद्दे