2015-12-16 12 views
5

ग्रहण आईडीई पर जावा कोड लिखते समय, दबाएं + स्पेस सामग्री सहायता विंडो पॉप अप करेगा।
उदाहरण के लिए, System. के लिए सामग्री सहायता विंडो कक्षा प्रणाली के लिए सभी उपलब्ध फ़ील्ड और विधियों की सूची देगी।ग्रहण जेडीटी: जावा सामग्री सहायता के लिए डेटा मॉडल कैसे प्राप्त करें

मुझे कोड द्वारा सामग्री सहायता विंडो के लिए "डेटा मॉडल" तक पहुंचने की आवश्यकता है।
उपर्युक्त उदाहरण का उपयोग करके, यह है: कक्षा का नाम System दिया गया है, मैं सभी उपलब्ध फ़ील्ड और विधियों को कैसे पुनर्प्राप्त कर सकता हूं?
मैं grepcode.com पर इन तीन वर्गों के स्रोत कोड पर कुछ समय बिताया:

org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext 
org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer 
org.eclipse.jdt.ui.text.java.CompletionProposalCollector 

यह एक ICompilationUnit उदाहरण की तरह लग रहा खेतों और विधि के नाम प्रदान करने के लिए प्रयोग किया जाता है।

तब मुझे समझ में नहीं आता कि ICompilationUnit जेरे सिस्टम लाइब्रेरी या तृतीय पक्ष लाइब्रेरी में किसी वर्ग के लिए उदाहरण कैसे उत्पन्न करें? या अगर मैंने सही तरीके से कोड नहीं पढ़ा है, तो प्रोग्राम को फ़ील्ड्स और विधियों का नाम कैसे मिला? (मुझे ऑफ़सेट और यूआई सामान, बस "डेटा मॉडल" भाग के बारे में चिंता करने की आवश्यकता नहीं है)।

+0

आईसीओएमपीलेशन यूनिट जेडीटी [सार सिंटेक्स ट्री] का हिस्सा है (http://www.vogella.com/tutorials/EclipseJDT/article.html) –

उत्तर

0

आप इस निश्चित वर्ग (YourClass.getMethods() या YourClass.getDeclaredMethods()) के सभी सदस्यों को प्राप्त करने के लिए java reflection API का उपयोग करने का प्रयास कर सकते हैं।

अपने इनपुट के अनुसार इसे गतिशील बनाने के लिए आप संबंधित कक्षा प्राप्त करने के लिए Class.forName(<fullClassName>) का उपयोग कर सकते हैं (इसके बारे में और जानकारी के लिए this post देखें)।

आप जिस समस्या में भाग ले सकते हैं वह यह है कि आपको पूर्ण योग्य श्रेणी का नाम देना होगा, इसलिए आपको यह पता लगाने के लिए आयात करना पड़ सकता है कि आपको किस वर्ग में संबंधित कक्षा की तलाश है, लेकिन यह जाने का एकमात्र तरीका है इस विधि के साथ।
सरल नाम सिर्फ हमेशा अद्वितीय नहीं है और खोज के इस प्रकार के लिए इसलिए उपयुक्त नहीं (समझाया here हैं।

1

ऐसा लगता है कि एकमात्र विकल्प एक (अस्थायी) संकलन इकाई है, जो बारी में एक ठीक तरह से स्थापित की आवश्यकता है बनाने के लिए है जावा परियोजना। बुनियादी ढांचे जो JRE, प्रयोग किया जाता है जो संकलक सेटिंग्स उपयोग किया जाता है, आदि

देखें here कैसे एक जावा परियोजना स्थापित करने, और here कैसे एक संकलन इकाई पाने के लिए जेडीटी पता करने के लिए के लिए आवश्यक है।

संकलन इकाई देखेंगे जैसे

class Foo { 
    void bar() { 
    java.lang.System. 
    } 
} 

और codeComplete() कुछ एक ऑफसेट सही System. के बाद स्थिति को दर्शाता है कि के साथ कहा जा करना होगा।

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