2011-03-08 12 views
7

परीक्षण उद्देश्यों के लिए, मैं अक्सर पहले से मौजूद किसी प्रोजेक्ट में कुछ कोड लिखना शुरू करता हूं। तो, मेरे कोड मैं परीक्षण करना चाहते हैं, अन्य सभी कोड के बाद आए इस तरह:जावा कंपाइलर: मृत कोड के बारे में शिकायत करना बंद करें

public static void main(String[] args) 
{ 
    char a = '%'; 
    System.out.println((int)a); 
    // To know where '%' is located in the ASCII table. 

    // But, of course, I don't want to start the whole project, so: 
    return; 

    // The real project starts here... 
} 

लेकिन संकलक निम्नलिखित "मृत कोड" की वजह से, return -statement के बारे में शिकायत।

if (0 != 1) return; 

मुझे इससे नफरत है: (जबकि C++ संकलक प्रोग्रामर का अनुसरण करता है और केवल वापसी कथन संकलित)

संकलक को रोकने के लिए की शिकायत है, मैं एक बेवकूफ if -statement लिखें। मैं क्या पूछता हूं संकलक नहीं कर सकता? क्या कुछ संकलन झंडे या एनोटेशन या मेरी समस्या को हल करने के लिए कुछ भी है?

धन्यवाद

+3

मैं बाहरी परीक्षण में अपने परीक्षण करने की सलाह दूंगा, जूनिट परीक्षण समाधान हो सकता है। – reef

+1

@reef मुझे लगता है कि उसका मतलब यूनिट परीक्षण – Rup

+0

के बजाए 'प्रयोग' का अर्थ है। सी के मुकाबले जावा में एक अलग डिज़ाइन दर्शन है, सी आपको स्पष्ट रूप से प्रतिबंधित नहीं किया गया है और यह आपको गलतियों से रोकने की कोशिश नहीं करता है (यह मानता है कि यह आपका है मुसीबत)। जावा आपको उन चीजों को करने से रोकने की कोशिश करता है जो समझ में नहीं आते हैं और अगर यह पता चलता है कि कुछ कोड निष्पादित नहीं होंगे तो चिल्लाएंगे। यह पसंद है या नहीं, लेकिन यह वही तरीका है। –

उत्तर

10

इस व्यवहार को बदलने के लिए कोई झंडे नहीं हैं। नियम जो मृत कोड को संकलित समय त्रुटि बनाते हैं part of the JLS (§14.21 Unreachable Statements) हैं और इसे बंद नहीं किया जा सकता है।

वहाँ पाश में एक स्पष्ट बचाव जो कोड इस तरह की अनुमति देता है है:

if (true) return; 

someOtherCode(); // this code will never execute, but the compiler will still allow it 

यह किया जाता है स्पष्ट रूप से "टिप्पणी आउट" या सशर्त संकलन (कुछ static final boolean ध्वज के आधार पर) की अनुमति के लिए।

मामले में आप उत्सुक हैं: बचाव तथ्य यह है कि एक if बयान की हालत अभिव्यक्ति का एक ज्ञात-निरंतर मूल्य नहीं जब भीतर या if बयान के बाद कोड की गम्यता जाँच माना जाता है पर आधारित है। एक ऐसी ही स्थिति while, जहां जाना जाता है-निरंतर मूल्यों माना जाता है के साथ होता है, तो यह कोड संकलन नहीं होगा:

while (true) return; 

someOtherCode(); // this will be flagged as an unreachable statement 
+0

सही उत्तर। –

1

आप मृत कॉड के बहुत सारे नहीं होना चाहिए ein अपनी परियोजना हालांकि दो तरीके मैं इस के आसपास मिलता है प्रोटोटाइप के लिए।

कोड/टिप्पणी करने के लिए/* */का उपयोग करें।

// But, of course, I don't want to start the whole project, so: 
    /* 
    // The real project starts here... 


    */ 
} 

या दूसरी विधि बनाएं।

// But, of course, I don't want to start the whole project, so: 
    // realProject(); 
} 

public static void realProject() 
    // The real project starts here... 
} 
+1

मैं "मृत" कोड पर टिप्पणी करने के लिए '/ * * /' का उपयोग करने का सुझाव नहीं दूंगा: यह उस कोड की ओर जाता है जो आईडीई के लिए अदृश्य है: यह "संदर्भ ढूंढने" के दौरान नहीं मिलता है, यह refactoring से प्रभावित नहीं है , आपको वाक्यविन्यास हाइलाइटिंग नहीं मिलेगी और इसी तरह। मुझे 'मृत "कोड लपेटकर मिला है यदि' (झूठा) {} 'क्लीनर समाधान है। लंबे समय तक सबसे अच्छा समाधान सभी मृत कोड को हटाने और इतिहास को केवल संस्करण नियंत्रण प्रणाली में रहने देना है ;-) –

+0

इंटेलिज टिप्पणी कोड को दोबारा करने में बहुत अच्छा है (यह भी शिकायत करता है कि आपकी टिप्पणियों में कोड है;) हालांकि, इसे हटाने से आमतौर पर सबसे अच्छी नीति होती है। –

+0

आईडीईए ऐसा करता है? यह साफ है, लेकिन यह कुछ हद तक नाजुक लगता है। क्या यह JavaDoc में कोड नमूने के बारे में भी शिकायत करता है? –

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