2009-09-30 11 views
46

यह जावा में यह करने के लिए कानूनी है:एकाधिक इंटरफेस को लागू करने के लिए जावा में विधि तर्क की आवश्यकता कैसे हो सकती है?

void spew(Appendable x) 
{ 
    x.append("Bleah!\n"); 
} 

मैं इस (वाक्य रचना नहीं कानूनी) कैसे कर सकते:

void spew(Appendable & Closeable x) 
{ 
    x.append("Bleah!\n"); 
    if (timeToClose()) 
     x.close(); 
} 

मैं चाहते हैं यदि संभव हो तो वस्तुओं है कि दोनों कर रहे हैं उपयोग करने के लिए कॉल करने के लिए मजबूर करने एक विशिष्ट प्रकार की आवश्यकता के बिना, स्वीकार्य और बंद करने योग्य। ऐसे कई मानक वर्ग हैं जो ऐसा करते हैं, उदा। BufferedWriter, PrintStream, आदि

तो मैं अपने खुद के इंटरफेस को परिभाषित

interface AppendableAndCloseable extends Appendable, Closeable {} 

कि मानक वर्गों कि Appendable और closeable लागू मेरी इंटरफ़ेस AppendableAndCloseable (को लागू नहीं करते जब तक कि मुझे समझ नहीं आता के बाद से काम नहीं करेगा जावा के साथ-साथ मुझे लगता है कि मैं करता हूं ... खाली इंटरफेस अभी भी अपने superinterfaces के ऊपर और परे विशिष्टता जोड़ते हैं)।

निकटतम मैं के बारे में सोच सकते हैं निम्न में से एक करने के लिए है:

  1. एक इंटरफेस (जैसे Appendable) चुनें, और क्रम परीक्षणों का उपयोग सुनिश्चित करने के लिए तर्क एक instanceof दूसरों है। डाउनसाइड: संकलन समय पर समस्या नहीं पकड़ी गई।

  2. कई तर्क की आवश्यकता (कैच संकलन समय शुद्धता लेकिन dorky दिखता है):

    void spew(Appendable xAppend, Closeable xClose) 
    { 
        xAppend.append("Bleah!\n"); 
        if (timeToClose()) 
         xClose.close(); 
    } 
    
+1

यह निश्चित रूप से कमी है। लेकिन वास्तव में आपका सवाल क्या है? – NawaMan

उत्तर

78

आप जेनरिक के साथ यह कर सकता है:

public <T extends Appendable & Closeable> void spew(T t){ 
    t.append("Bleah!\n"); 
    if (timeToClose()) 
     t.close(); 
} 

आपका वाक्य रचना था लगभग सही , वास्तव में।

+0

आह! हुर्रे! :-) –

+0

क्या यह उपकरण के लिए भी काम करता है? मैं पैरामीटर ऑब्जेक्ट को क्रमबद्ध करने की कोशिश कर रहा हूं? – Zapnologica

+1

@Zapnologica: एक इंटरफेस को लागू करने के लिए? नहीं, आप इंटरफेस में घोषित जेनेरिक पैरामीटर पर अतिरिक्त प्रकार के प्रतिबंध नहीं डाल सकते हैं। –

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

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