Você usa null com frequência? E temos isso na especificação

Hoje em dia, as desvantagens de usar null como tipos de retorno ou passá-los como um argumento tornaram-se óbvias para a maioria dos desenvolvedores.





Desenvolvedores mais jovens, mesmo que não entendam, geralmente seguem o "código limpo" (depois de ler um livro de Robert Martin). Portanto, códigos com a possibilidade de ocorrência de NPE se tornaram menos comuns, embora, é claro, eles sejam.





Não quero dizer que qualquer uso de null é ruim, mas sim, você pode dizer "medir sete vezes, cortar uma vez".





No entanto, não reclamei sobre o NPE por muito tempo, mesmo quando os desenvolvedores de linguagens com controle estrito sobre este tópico se gabaram de sua segurança nula. Mas devido a um bug, percebi que apenas usar null não é tão ruim, mesmo se você retornar ou aprovar. Claro, isso é muito ruim, mas há coisas piores - nulo nas especificações.





Não seria particularmente interessante se a história fosse sobre uma empresa que fez uma especificação ruim. Em vez disso, vamos falar sobre a especificação mais conhecida do Java EE - Java Servlet Specification , especificamente pegar a classe HttpServletRequest e examinar o métodogetCookies()







getCookies





Cookie[] getCookies()
      
      



Retorna uma matriz contendo todos os Cookie



objetos que o cliente enviou com esta solicitação. Este método retorna null



se nenhum cookie foi enviado.





  • Retorna:





    an array of all the Cookies



    included with this request, or null



    if the request has no cookies





:





This method returns null



if no cookies were sent.





, , null. :





  • , , -, , .





null



, , . ? , ?





null vs empty array

null



, , :





  • API, null-check





  • - , getCookies() null .





  • . , null



    ( )





, , . null , , ( ).





, .





  • -, , . , , , .





  • -, (, - )





, null





for (Cookie cookie : httpServletRequest.getCookies()) { 
  // NPE!    // …
}
      
      



int cookiesSize = httpServletRequest.getCookies().length    // NPE!
      
      



null-check:





if (httpServletRequest.getCookies() != null)
for (Cookie cookie : httpServletRequest.getCookies()) {    
  // …
}
      
      



Cookie[] cookies = httpServletRequest.getCookies();
int cookiesSize = cookies == null ? 0 : cookies.length
      
      



, , NPE . , .





API, . Jetty





, , .





,





:





return cookies == null?null:cookies.getCookies();
      
      



:





if (cookies == null || cookies.getCookies().length == 0)    
	return null;
return _cookies.getCookies();
      
      



, .





, , . null



, , null



. , .





!

, , , . , ? , ?





, classpathx





The GNU Classpath Extensions project, aka classpathx builds free versions of Oracle's Java extension libraries, the packages in the javax



namespace. It is a companion project of the GNU Classpath project.





" "





Cookie[] getCookies()
      
      



Gets all the Cookies present in the request.





  • Returns:





    an array containing all the Cookies or an empty array if there are no cookies





  • Since:





    2.0





. null



. , Sonar, SEI CERT Oracle Coding Standart for Java





. , , , .





.





- , null . , , , , . , .





, , , . null , .





- ( ):





  • - ,









  • . - , , .





, , .






Speaking at a software conference in 2009, Tony Hoare apologized for inventing the null reference:[25]





Eu chamo isso de meu erro de um bilhão de dólares. Foi a invenção da referência nula em 1965. Naquela época, eu estava projetando o primeiro sistema de tipo abrangente para referências em uma linguagem orientada a objetos ( ALGOL W ). Meu objetivo era garantir que todo uso de referências fosse absolutamente seguro, com checagem realizada automaticamente pelo compilador. Mas não pude resistir à tentação de colocar uma referência nula, simplesmente porque era muito fácil de implementar. Isso levou a inúmeros erros, vulnerabilidades e falhas no sistema, que provavelmente causaram um bilhão de dólares em dores e danos nos últimos quarenta anos








All Articles