2014-05-07 3 views
5

शेल कमांड प्रॉम्प्ट पर, यदि मैं javac -help में टाइप करता हूं, तो यह मुझे बताता है कि -implicit विकल्प "... निर्दिष्ट रूप से संदर्भित फ़ाइलों के लिए कक्षा फ़ाइलों को उत्पन्न करना है या नहीं" निर्दिष्ट करता है। दो विकल्प है कि -implicit:none या class के साथ जाना है।कोई कैसे javac के -implicit विकल्प काम करता है का एक उदाहरण दे सकते हैं?

सबसे पहले, -implicit:none का उपयोग करने और implicit विकल्प का उपयोग करने के बीच क्या अंतर है?

दूसरा, मेरे प्रश्न शीर्षक के बारे में, मैं उम्मीद कर रहा था कि प्रदान किया गया एक उदाहरण मुझे यह समझने में मदद करेगा कि एक स्पष्ट संदर्भित फ़ाइल क्या थी। बहुत बहुत धन्यवाद।

उत्तर

5

आपने इसे Java documentation में काफी अच्छी तरह वर्णित किया है।

अपने पहले सवाल का जवाब बहुत सरल है। -implicit विकल्प का उपयोग नहीं लगभग -implicit:class का उपयोग कर (जो विकल्प का डिफ़ॉल्ट मान है) की तरह है, लेकिन स्पष्ट रूप से विकल्प का उपयोग कर आप कुछ चेतावनी को दबाने:

संकलक कुछ प्रकार की जानकारी के लिए की जरूरत नहीं खोज पाते जब तक के बाद एनोटेशन प्रोसेस पूर्ण हो। जब प्रकार की जानकारी किसी स्रोत फ़ाइल में पाई जाती है और -implicit विकल्प निर्दिष्ट नहीं किया गया है, तो कंपाइलर चेतावनी देता है कि बिना एनोटेशन प्रोसेसिंग के अधीन फ़ाइल संकलित की जा रही है। चेतावनी को अक्षम करने के लिए, कमांड लाइन पर फ़ाइल निर्दिष्ट करें (ताकि यह एनोटेशन प्रोसेसिंग के अधीन हो) या -implicit विकल्प निर्दिष्ट करने के लिए या क्लास फ़ाइलों को ऐसी स्रोत फ़ाइलों के लिए जेनरेट नहीं किया जाना चाहिए।

अब आपका दूसरा प्रश्न। प्रलेखन राज्यों के रूप में:

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

उदाहरण के लिए

, जब आप एक उपवर्ग java.applet.Applet बनाते समय, आपके एप्लेट के पूर्वज वर्गों का उपयोग हैं: java.awt.Panel, java.awt.Container, java.awt.Component, और java.lang.Object

चलो तीन फाइलों में तीन कक्षाएं हैं: मुख्य, ImplicitClass, BaseImplicitClass।

Main.java:

public class Main { 
    public static void main(String[] args) { 
     ImplicitClass ec = new ImplicitClass(); 
     System.out.println(ec.getClass()); 
    } 
} 

ImplicitClass.java:

public class ImplicitClass extends BaseImplicitClass { 
} 

BaseImplicitClass।जावा:

public class BaseImplicitClass { 
} 

जब आप इस तरह कमांड लाइन से उन्हें संकलन:

javac -cp . -implicit:class Main.java 

या

javac -cp . Main.java 

तीनों * .class फ़ाइलों को बनाने से।

जब आप इसे

javac -cp . -implicit:none Main.java 

केवल Main.class बनाई गई है संकलन।

जब आप इसे संकलन

javac -cp . -implicit:none Main.java ImplicitClass.java 

दो * .class फ़ाइलें इस वर्ग के रूप में बनाई गई हैं, Main.class और ImplicitClass.class (ImplicitClass अब स्पष्ट हो गया है, क्योंकि यह स्पष्ट रूप से संकलक करने के लिए पारित किया गया है), लेकिन नहीं BaseImplicitClass.class जरूरी है, लेकिन निहित है।

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