2010-07-02 10 views
5
public void insert(final String key, final String value) throws Exception { 
    execute(new Command(){ 
     public Void execute(final Keyspace ks) throws Exception { 
     ks.insert(key, createColumnPath(COLUMN_NAME), bytes(value)); 
     return null; 
     } 
    }); 
    } 

नया कमांड का शरीर() एक इनलाइन विधि की तरह दिखता है?क्या यह एक इनलाइन अज्ञात विधि माना जाता है?

यह क्या कहा जाता है, मैं इसे पूरी तरह से समझना चाहता हूं।

उत्तर

11

यह अज्ञात आंतरिक वर्ग है। आप एक कक्षा बना रहे हैं जो Command कक्षा से प्राप्त होती है या बस Command इंटरफ़ेस लागू करती है। इस मामले में आप केवल एक ही विधि अधिभावी रहे हैं, लेकिन आप अधिक ओवरराइड कर सकते हैं - और साथ ही होने अतिरिक्त क्षेत्रों आदि

जावा नहीं (वर्तमान में) कुछ भी जो काफी एक सी # गुमनाम विधि के बराबर है है , अगर आप यही सोच रहे थे। यद्यपि एक अज्ञात भीतरी कक्षा शायद इसके सबसे नज़दीकी चीज है।

+0

"जावा (वर्तमान में) में कुछ भी नहीं है जो सी # अज्ञात विधि के बराबर है" या रूबी अज्ञात विधि या पायथन अज्ञात विधि या लिस्प अज्ञात विधि या जावास्क्रिप्ट अज्ञात विधि या ... –

2

यह एक अज्ञात आंतरिक वर्ग है। इस मामले में यह कमांड इंटरफ़ेस या अमूर्त वर्ग का कार्यान्वयन संभवतः है।

5

यह anonymous class है।

Command एक पहले से परिभाषित इंटरफेस या वर्ग है, इसलिए इस के बराबर है:

public void insert(final String key, final String value) throws Exception { 
    class MyCommand implements Command { // or "extends Command" 
     public Void execute(final Keyspace ks) throws Exception { 
      ks.insert(key, createColumnPath(COLUMN_NAME), bytes(value)); 
      return null; 
     } 
    } 
    execute(new MyCommand()); 
} 
2

के रूप में कहा गया है, यह एक गुमनाम आंतरिक वर्ग है। एकल-विधि इंटरफेस को लागू करने के लिए आप अक्सर इस दृष्टिकोण को त्वरित साधन के रूप में देखते हैं।

ग्रोवी और जावास्क्रिप्ट जैसी भाषाएं इस तरह की चीज़ों के लिए बंद होती हैं।

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