Pergunta

Resumo praticamente diz tudo. Aqui está o trecho relevante de código em ImmutableList.createFromIterable():

  if (element == null) {
    throw new NullPointerException("at index " + index);
  }

Eu encontrei isso várias vezes e não consigo ver por que uma função de biblioteca de uso geral deve impor essa limitação.

EDIT 1: Por "uso geral", eu ficaria feliz com 95% dos casos. Mas acho que não escrevi 100 chamadas para ImmutableList.of() No entanto, e foram mordidos por isso mais de uma vez. Talvez eu seja um outlier, no entanto. :)

EDIT 2: Acho que minha grande queixa é que isso cria um "soluço" ao interagir com o padrão java.util Coleções. Como você apontou em sua palestra, problemas com nulls em coleções podem aparecer longe de onde esses nulos foram inseridos. Mas se eu tiver uma longa cadeia de código que coloca nulos em uma coleção padrão em uma extremidade e os lida adequadamente no outro, não consigo substituir uma aula de coleções do Google em qualquer ponto ao longo do caminho, porque ela imediatamente será lançar um NullPointerException.

Foi útil?

Solução

Eu expliquei isso no ponto de 25 minutos deste vídeo:http://www.youtube.com/watch?v=zeo_j2ochym

Desculpe pela resposta preguiçosa, mas essa é apenas uma pergunta "Por que" (sem dúvida não é apropriada para Stackoverflow?).

EDITAR: Aqui está outro ponto, não tenho certeza se deixei claro no vídeo: o total (em todo o código Java do mundo), quantidade de código extra que deve ser escrito para esses casos nulos para usar os antigos standbys Collections.unmodifiableList(Arrays.asList(...)) etc. está sobrecarregado pelo total (em todo o código Java do mundo) checkArgument(!foos.contains(null)) Ligue para todos precisariam acrescentar se nossas coleções não cuidavam disso para você. A maioria, de longe, os usos de uma coleção não esperam que nenhum nulo esteja presente e realmente deve falhar rapidamente, se houver.

Outras dicas

Em geral, no Google Coleções, os desenvolvedores são do grupo que não acredita que os nulos devem ser um parâmetro de uso geral esperado.

Uma razão é que ele permite que funções que funcionam na lista não precisam verificar todos os elementos quanto a nulo, melhorando significativamente o desempenho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top