2011-10-05 23 views
5

documentation for @ParametersAreNonnullByDefault, söylüyor:@ParametersAreNonnullByDefault, yöntem dönüş değerleri için de geçerlidir?

Bu açıklama yöntemi bu elemanda sürece varsayılan olarak nonnull metrelerdir belirten bir paket, bir sınıf veya yöntem uygulanabilir ...

Bir yöntemin dönüş tipi/değerini parametre olarak kabul etmem. Bu sadece imzasının bir parçası, bu benim için belirsiz bir şey.

Java tutorial for methods benim gibi düşünmek gibi görünüyor. Joachim Sauer onun answer, adı @ParametersAreNonnullByDefault (parametrelerin) yorum bölümünde benim için işaret


olarak açıkça bu açıklama yöntemlerinin dönüş türleri/değerler için geçerli değildir benim için belirtilen gerekirdi . Kördüm! :) Teşekkürler Joachim!

Bunun ışığında, yalnızca bir yerde bir @EverythingIsNonnullByDefault bulunması gerektiğini söyleyebilirim.

+0

Bu nedenle, bu ek açıklamanın geri dönüş değerleri için geçerli olduğunu düşünmek için nedeniniz nedir? –

+0

Bunun neden yapılacağına dair bir nedenim yok, bunun yerine bunu yapmak isterim. ([Bu cevap] için yorumuma bakın (http://stackoverflow.com/questions/7658353/is-parametersarenonnullbydefault-applies-to-method-return-values-too/7658375#7658375).) –

cevap

3

@ParametersAreNonnullByDefault'un geri dönüş değerleri için neden geçerli olmasının bir nedenini göremiyorum.

+0

Sebebi @ Nonnull', yöntem döndürme değerlerine de uygulanabilir. En azından [FindBugs ''NonNull' açıklaması için belgeler] (http://findbugs.sourceforge.net/manual/annotations.html) (ki bu,' @ Nonnull' ile aynı şey değilse bile) . –

+0

@Psycho_Dad: Bir dönüş türünün geçersizliğini belirtirsiniz, evet. Fakat bu, ** bu ** varsayılan notun, siz bir tane ayarlamazsanız bunu etkilediği anlamına gelmez. –

+0

Üzgünüm ama seni net olarak anlamadım. Sorum şu ise, eldeki ek açıklama, eğer ben ayarladıysam, yöntemlerin dönüş değerleri de ** için geçerliydi. Bunu yapmazsam ne yapacağından daha az umursamazdım. :) –

6

Hayır, @ParametersAreNonnullByDefault yalnızca parametreleri parametreleri için geçerlidir - arayanın kabul ettiği değerler (parantezler arasında). Yöntem hala bir null değerini döndürmekte serbesttir.

@Nonnull'u uygulayabileceğiniz her üç noktayı birleştiren bir sınıf var, ancak kodumuzda hala JSR-305 tarafından sağlanan üç ayrı ek açıklama kullanmaya devam ediyorum.

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 { 
} 
İlgili konular