2011-10-05 4 views
5

El documentation for @ParametersAreNonnullByDefault dice, que:¿Se aplica @ParametersAreNonnullByDefault también a los valores de retorno del método?

Esta anotación se puede aplicar a un paquete, clase o método para indicar que el método parámetros en ese elemento no nulo son por defecto a menos ...

No considero que el tipo/valor de retorno de un método sea su parámetro. Es solo una parte de su firma, así que esto es algo ambiguo para mí.

El Java tutorial for methods parece pensar como yo.


Como Joachim Sauer señaló para mí en la sección de comentarios de sus answer, el nombre @ParametersAreNonnullByDefault (parámetros) debería haber indicado claramente para mí que esta anotación no se aplica a los tipos de retorno métodos/valores . ¡Estaba ciego! :) Gracias Joachim!

A la luz de esto solo puedo dice que un @EverythingIsNonnullByDefault debería existir somwhere. :)

+0

¿Cuál es el motivo para pensar que esta anotación _se aplicaría a los valores de retorno? –

+0

No tengo una razón de por qué haría esto, en cambio me gustaría que lo haga. (Véase mi comentario para [esta respuesta] (http://stackoverflow.com/questions/7658353/is-parametersarenonnullbydefault-applies-to-method-return-values-too/7658375#7658375).) –

Respuesta

3

no veo una razón por la @ParametersAreNonnullByDefault debe aplicarse a los valores de retorno.

+0

Mi razón es que ' @ Nonnull' también se puede aplicar a los valores de retorno del método. Por lo menos el [documentación para FindBugs' '@ anotación NonNull'] (http://findbugs.sourceforge.net/manual/annotations.html) (que es casi, si no es lo mismo que '@ Nonnull') dice precisamente eso . –

+0

@Psycho_Dad: especifica la nulidad de un tipo de devolución, sí. Pero eso no significa que ** esta ** anotación predeterminada influya si no establece uno. –

+0

Lo siento pero no te entendí claramente. Mi pregunta era si la anotación en cuestión también se aplica a los valores de retorno de los métodos ** si lo configuro **. No me importa lo que haga si no lo configuro. :) –

6

No, @ParametersAreNonnullByDefault se aplica solo a los parámetros del método --los valores que acepta de la persona que llama (entre paréntesis). El método aún puede devolver un valor de null.

Aquí hay una clase que combina los tres lugares donde puede aplicar @Nonnull, aunque en nuestro código todavía utilizo tres anotaciones separadas, una de las cuales es suministrada por 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 { 
} 
Cuestiones relacionadas