2015-02-03 3 views
5

गूगल मुझे विफल हो रहा है द्वारा गैर-शून्य वापसी मान निर्दिष्ट करता है। इस एनोटेशन के लिए इस्तेमाल किया गया: ReturnValuesAreNonnullByDefaultवहाँ एक डिफ़ॉल्ट, वर्ग-स्तर एनोटेशन है कि पदावनत नहीं कि डिफ़ॉल्ट

लेकिन यह अब नहीं रहेगी तथा जावाडोक जो टिप्पणियों के लिए नए उपयोग करने के लिए संकेत नहीं है। पूरे वर्ग पर @Nonnull वापस मूल्यों पर लागू नहीं होता है क्योंकि मैंने अभी इसका परीक्षण किया है और मुझे शून्य को वापस करने की विधि के लिए कोई चेतावनी नहीं है। मैं विशेष रूप से प्रत्येक एकल वापसी मूल्य को एनोटेट नहीं करना चाहता, तो क्या वहां एक अच्छा विकल्प है?

+0

पैकेज सारांश यह कहते हैं "यह एनोटेशन ज्यादातर पदावनत और JSR 305 एनोटेशन javax.annotation में परिभाषित द्वारा प्रतिस्थापित कर रहे हैं।"। हालांकि, मुझे यकीन है कि जो javax.annotation आप ReturnValuesAreNonnullByDefault के लिए एक स्थानापन्न के रूप में इस्तेमाल करना चाहिए नहीं कर रहा हूँ। http://findbugs.sourceforge.net/api/edu/umd/cs/findbugs/annotations/package-summary.html – Marco

उत्तर

1

आप this answer का उपयोग अपने स्वयं के सरल @EverythingIsNonnullByDefault एनोटेशन का निर्माण करने के पैकेज/श्रेणी स्तर पर लागू करने के लिए सभी मामलों में, या this one आप कैसे अलग एनोटेशन बनाने के लिए खेतों और विधि वापसी मूल्यों को नियंत्रित करने के पता चलता है जो कवर करने के लिए कर सकते हैं। हमने उन सभी का उपयोग करने का विकल्प चुना लेकिन पैकेज स्तर पर "सब कुछ" संस्करण लागू करने के लिए जाते हैं।

आप एक असली जल्दी में हैं, कॉपी-एन-पेस्ट पदावनत एनोटेशन और प्रतिवाद को हटा दें।

package com.sample; 

import java.lang.annotation.Documented; 
import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 

import javax.annotation.meta.TypeQualifierDefault; 

/** 
* This annotation can be applied to a package or class to indicate that the 
* classes' methods in that element all return nonnull values by default 
* unless there is 
* <ul> 
* <li>an explicit nullness annotation 
* <li>a default method annotation applied to a more tightly nested element. 
* </ul> 
*/ 
@Documented 
@Nonnull 
@TypeQualifierDefault(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface ReturnValuesAreNonnullByDefault { 
    // feel free to name it MethodsAreNonnullByDefault; I find that confusing 
} 
1

आप Checker Framework का उपयोग कर रहे हैं, तो आप @DefaultQualifier उपयोग कर सकते हैं। उदाहरण के लिए, आप

@DefaultQualifier(value=NonNull.class, locations=DefaultLocation.RETURNS) 

लिख सकता है लेकिन, आप ऐसा करने की जरूरत नहीं है क्योंकि परीक्षक फ्रेमवर्क के Nullness Checker पहले से ही डिफ़ॉल्ट कि का उपयोग करता है। (जैसा कि आपने पाया है, सबसे अच्छा डिफ़ॉल्ट यह मानना ​​है कि प्रत्येक विधि शून्य हो जाती है।)

नलनेस चेकर का एक लाभ यह है कि यह FindBugs की तुलना में अधिक शून्य-सूचक-संबंधित त्रुटियों का पता लगाता है।

नलनेस चेकर compatible FindBugs की टिप्पणियों के साथ है, इसलिए आप अपने कोड में मौजूदा FindBugs एनोटेशन को बदलने के बिना नलनेस चेकर को आजमा सकते हैं।

+0

मैं FindBugs उपयोग कर रहा था के बाद से वह यह है कि क्या मेरी कंपनी में अन्य टीमों के प्रयोग कर रहे हैं। मैं चेकर फ्रेमवर्क में देखूंगा क्योंकि इसमें अधिक बग पावर पावर है। मुझे इसके बारे में बताने के लिए धन्यवाद! – Selena

+0

आह, मैं देखता हूं। मूल प्रश्न ने FindBugs निर्दिष्ट नहीं किया था। सौभाग्य! – mernst

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