2011-10-05 15 views
5

documentation for @ParametersAreNonnullByDefault कहते हैं, कि:@ParametersAreNonnullByDefault विधि वापसी मानों पर भी लागू होता है?

यह एनोटेशन संकेत मिलता है कि विधि पैरामीटर उस तत्व में डिफ़ॉल्ट जब तक द्वारा nonnull हैं एक पैकेज, वर्ग या विधि के लिए लागू किया जा सकता है ...

मैं इसे पैरामीटर होने के लिए किसी विधि के रिटर्न प्रकार/मान पर विचार नहीं करता हूं। यह केवल अपने हस्ताक्षर का हिस्सा है, इसलिए यह मेरे लिए अस्पष्ट है।

Java tutorial for methods मेरे जैसा लगता है।


रूप Joachim Sauer उसकी answer, नाम @ParametersAreNonnullByDefault (मापदंडों) की टिप्पणी अनुभाग में मेरे लिए स्पष्ट रूप से कहा मेरे लिए इंगित किया है कि इस टिप्पणी के तरीकों की वापसी प्रकार/मूल्यों पर लागू नहीं होता । मैं अंधा था! :) धन्यवाद Joachim!

इस के प्रकाश में मैं केवल इतना कह सकता हूं कि @EverythingIsNonnullByDefault कहीं भी मौजूद होना चाहिए। :)

+0

तो यह सोचने का आपका क्या कारण है कि यह एनोटेशन _would_ मूल्य वापस करने के लिए लागू होता है? –

+0

मेरे पास कोई कारण नहीं है कि यह ऐसा क्यों करेगा, इसके बजाय मैं इसे ऐसा करना चाहता हूं। ([इस उत्तर] के लिए मेरी टिप्पणी देखें (http://stackoverflow.com/questions/7658353/is-parametersarenonnullbydefault-applies-to-method-return-values-too/7658375#7658375)।) –

उत्तर

3

मुझे कोई कारण नहीं दिख रहा है कि @ParametersAreNonnullByDefault वापसी मानों पर क्यों लागू होना चाहिए।

+0

मेरा कारण यह है कि ' @ Nonnull' विधि वापसी मूल्यों पर भी लागू किया जा सकता है। कम से कम [FindBugs ''@ NonNull' एनोटेशन के लिए प्रलेखन] (http://findbugs.sourceforge.net/manual/annotations.html) (जो लगभग है, यदि' @ Nonnull' जैसी ही चीज़ नहीं है) तो बस यही कहता है । –

+0

@Psycho_Dad: आप रिटर्न प्रकार की शून्यता निर्दिष्ट करते हैं, हां। लेकिन इसका मतलब यह नहीं है कि ** यह ** डिफ़ॉल्ट एनोटेशन इसे प्रभावित करता है यदि आप एक सेट नहीं करते हैं। –

+0

क्षमा करें, लेकिन मैं आपको स्पष्ट रूप से समझ में नहीं आया। मेरा सवाल यह था कि अगर हाथ में एनोटेशन विधियों के रिटर्न वैल्यू पर भी लागू होता है ** अगर मैं इसे ** सेट करता हूं। अगर मैं इसे सेट नहीं करता तो मैं इससे कम परवाह नहीं कर सकता था। :) –

6

नहीं, @ParametersAreNonnullByDefault केवल एक विधि के पैरामीटर पर लागू होता है - यह मान कॉलर (कोष्ठक के बीच) से स्वीकार करता है। null मान वापस करने के लिए विधि अभी भी निःशुल्क है।

यहां कक्षा कि सभी तीन स्थानों पर जहां आप @Nonnull आवेदन कर सकते हैं, हालांकि हमारे कोड में मैं अभी भी तीन अलग-अलग एनोटेशन, जिनमें से एक JSR-305 द्वारा आपूर्ति की है का उपयोग को जोड़ती है।

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, class or method to indicate that all 
* class fields and method parameters and return values in that element are nonnull 
* by default unless overridden. 
*/ 
@Documented 
@Nonnull 
@TypeQualifierDefault({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface EverythingIsNonnullByDefault { 
} 
संबंधित मुद्दे