Eu vi algum método em java declarado como:
void foo(@Nullable Object obj)
{ ... }
Qual o significado @Nullable
daqui? Isso significa que a entrada poderia ser null
?
Sem a anotação, a entrada ainda pode ser nula, então acho que não é só isso?
java
annotations
user1508893
fonte
fonte
@Nullable
no contexto da sua pergunta? É Checker?Respostas:
Torna claro que o método aceita valores nulos e que, se você substituir o método, também deverá aceitar valores nulos.
Também serve como uma dica para analisadores de código como o FindBugs . Por exemplo, se esse método derreferenciar seu argumento sem verificar primeiro o nulo, FindBugs emitirá um aviso.
fonte
Essa anotação é comumente usada para eliminar
NullPointerExceptions
.@Nullable
diz que esse parâmetro pode sernull
. Um bom exemplo desse comportamento pode ser encontrado no Google Guice . Nesta estrutura de injeção de dependência leve, você pode dizer que essa dependência pode sernull
. Se você tentasse passarnull
sem uma anotação, a estrutura se recusaria a fazer seu trabalho.O que é mais
@Nullable
pode ser usado com@NotNull
anotação. Aqui você pode encontrar algumas dicas sobre como usá-las corretamente. A inspeção de código no IntelliJ verifica as anotações e ajuda a depurar o código.fonte
Diferentes ferramentas podem interpretar o significado de
@Nullable
diferente. Por exemplo, o Checker Framework e o FindBugs lidam de maneira@Nullable
diferente .fonte
É verdade que, no meu mundo, há definitivamente pensamentos diferentes, não posso impor "Nunca passar um nulo" porque estou lidando com terceiros incontroláveis, como chamadores de API, registros de banco de dados, ex-programadores etc ... por isso sou paranóico e defensivo nas abordagens . Como você está no Java8 ou posterior, existe uma abordagem um pouco mais limpa do que um
if
bloco.Você também pode lançar alguma exceção trocando
.orElse
paraorElseThrow(() -> new Exception("Dont' send a null"))
.Se você não quiser usar @Nullable, que não adiciona nada funcionalmente, por que não nomear o parâmetro com
mayBe...
para que sua intenção seja clara.fonte