2012-06-28 13 views
8

मैंने अभी नए ग्रहण 4.2 (जूनो) नल विश्लेषण का उपयोग करना शुरू कर दिया है।क्या जावा विधि को चिह्नित करने का कोई तरीका है (जैसे एनोटेट) जावा विधि कभी वापस नहीं आती है?

इस तरह

कोड पर:

x = foo(); 
if (x == null) 
    fail("x is null"); 
return x.bar(); 

मैं चेतावनी है कि एक्स अशक्त हो सकता है हो रही है। लेकिन यह नहीं हो सकता है, क्योंकि हमेशा विफल रहता है और इसलिए कभी वापस नहीं आता है। (बेहतर अंतर-प्रक्रियात्मक विश्लेषण के साथ यह संभवतः इसे स्वचालित रूप से निर्धारित कर सकता है, लेकिन वर्तमान में ऐसा प्रतीत नहीं होता है।)

जाहिर है, चेतावनी के आसपास कोड को फिर से लिखने के तरीके हैं, लेकिन मुझे क्या चाहिए इंगित करने का एक तरीका (उदाहरण के लिए एक एनोटेशन) जो कभी विफल नहीं होता है।

मैंने @SuppressWarnings ("null") के साथ चेतावनी को दबाने की भी कोशिश की लेकिन यह काम नहीं किया। assert x != null; (यह मानते हुए आप सेटिंग चालू है शामिल करने के लिए अशक्त विश्लेषण में इस बात पर ज़ोर)

जीसीसी C++ में मैं कर सकते हैं:: void fn __attribute__ ((noreturn))

+0

मैं इस स्थिति के बारे में पता नहीं कर रहा हूँ। क्या आपको इसकी आवश्यकता है, या यह अकादमिक पूछताछ से अधिक है? – BlackVegetable

+1

यह महत्वपूर्ण नहीं है क्योंकि मैं आसानी से इसके आसपास काम कर सकता हूं, लेकिन यह वास्तविक उत्पादन कोड से है। –

उत्तर

11

एक अर्द्ध

एक तरह से चेतावनी से छुटकारा पाने में जोड़ने के लिए है

public RuntimeException fail(String message) { 
    throw new RuntimeException(message); 
} 

ताकि आप throw fail("x is null") लिख सकते हैं: यह करने के लिए पारंपरिक तरीका इस प्रकार है। बेशक, fail हमेशा फेंकने को समाप्त कर देगा, throw नहीं, लेकिन यह संकलक को आश्वस्त करने के लिए पर्याप्त है कि वह पंक्ति हमेशा फेंक देगी।

+1

दिलचस्प कामकाज। क्या कोई इस पैटर्न का इस्तेमाल करने की सिफारिश करता है? – BlackVegetable

+4

संदर्भ के लिए, यह 'थ्रोबल्स' उपयोगिता वर्ग में गुवा द्वारा उपयोग किया जाने वाला पैटर्न है। –

+0

'सार्वजनिक रनटाइम अपवाद विफल (स्ट्रिंग संदेश) से बेहतर क्यों है { नया रनटाइम अपवाद (संदेश) लौटाएं; } '? मैं सिर्फ एक सवाल पूछ रहा हूं, वरीयता व्यक्त नहीं करता हूं। – emory

0

क्या आपने org.eclipse.jdt.annotation.Nullable एनोटेशन की कोशिश की है?

http://git.eclipse.org/c/jdt/eclipse.jdt.core.git/tree/org.eclipse.jdt.annotation/src/org/eclipse/jdt/annotation/Nullable.java

+0

यह उपयोगकर्ता की समस्या का समाधान कैसे करता है? वह पहले से ही शून्य के लिए एक स्पष्ट जांच कर रहा है। –

+0

@ लुइस वासरमैन: यह चेतावनियों को दबाने का एक तरीका है –

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