2013-10-31 13 views
8

मैं जावा परियोजना कर रहा हूं और मुझे यह समस्या मिली है और यह नहीं पता कि इसे कैसे ठीक किया जाए।MyClass को java.lang पर नहीं डाला जा सकता है। कॉम्पैरेबल: java.lang.ClassCastException

अपने प्रोजेक्ट में कक्षाएं (सरलीकृत):

public class Item { 

    private String itemID; 
    private Integer price; 

    public Integer getPrice() { 

     return this.price; 

    } 

} 

public class Store { 

    private String storeID; 
    private String address; 

} 

public class Stock { 

    private Item item; 
    private Store store; 
    private Integer itemCount; 

    public Integer getInventoryValue() { 

     return this.item.getPrice() * this.itemCount; 

    } 
} 

तब मैं स्टॉक का एक ArrayList तो मैं किसी अन्य वर्ग कहा जाता CompareByValue

public class CompareByValue implements Comparator<Stock> { 

    @Override 
    public int compare(Stock stock1, Stock stock2) { 

     return (stock1.getInventoryValue() - stock2.getInventoryValue()); 

    } 

}

जब मैं बनाने सुलझाने की कोशिश प्रोग्राम चलाने की कोशिश करें, यह त्रुटि देता है:

Exception in thread "main" java.lang.ClassCastException: Stock cannot be cast to java.lang.Comparable

कोई भी जानता है कि क्या गलत है?

+1

आप प्रोग्राम कैसे चलाते हैं, खासकर जहां आप सूची को सॉर्ट करते हैं? –

उत्तर

12

ऐसा इसलिए है क्योंकि StockComparable लागू नहीं कर रहा है। या तो इसे लागू:

public class Stock implements Comparable<Stock> { 
    public int compareTo(Stock o) { 
     // ... 
    } 
} 

... या sort() विधि के लिए पैरामीटर के रूप में CompareByValue का एक उदाहरण पारित:

Collections.sort(list, new CompareByValue()); 
0
केवल कोड से

, यह ठीक लग रहा है। क्या आप निश्चित रूप से उपरोक्त कोड से अपवाद हैं? यदि आप स्टॉक ऑब्जेक्ट को किसी भी सॉर्ट किए गए संग्रह में डालते हैं, तो आपको ऐसा अपवाद दिखाई देगा और तुलनात्मक इंटरफ़ेस को लागू करने की आवश्यकता होगी।

लेकिन जहां आपके कस्टम तुलनाकर्ता को पास किया गया है, तो आपको स्टॉक को तुलनात्मक बनाने की आवश्यकता नहीं है। यह वही मामला है जैसे आप अज्ञात तुलनात्मक कार्यान्वयन देते हैं।

अपने तुलनित्र को ट्रीसेट जैसे क्रमबद्ध संग्रह के लिए सेट करें और फिर स्टॉक ऑब्जेक्ट को क्रमबद्ध संग्रह में जोड़ें, इसे तुलनात्मक इंटरफ़ेस को लागू किए बिना काम करना चाहिए।

+0

मुझे खेद है हर कोई। बस पता चला कि txt फ़ाइल में एक टाइपो बनाई गई है जो एक नल ऑब्जेक्ट बनाई गई है और ऐरेलिस्ट में जोड़ा गया है। कृपया इस सवाल को हटा दें। – user2234225

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

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