Pergunta

No Java 1.4.2, classe java.math.BigInteger implementa interfaces Comparable, Serializable.

No Java 1.5.0, classe java.math.BigInteger implementa interfaces Serializable, Comparable<BigInteger>.

Este é apenas um exemplo para ajudar a me perguntar sobre < e >.O que eu estou realmente querendo saber sobre o < e > coisas.

A minha pergunta é tríplice:

  • o que faz o <BigInteger> parte do implements declaração significa?
  • o que é que a sintaxe de chamada?
  • e o que ele faz?

P. S.:É realmente difícil para o google < e > e impossível de busca de forma para < e > em primeiro lugar.

Obrigado!

Foi útil?

Solução

Leia o Java Generics Tutorial.A coisa entre os parênteses em ângulo é um tipo de parâmetros Comparáveis é uma classe genérica, e, neste caso, o ângulo entre parênteses significa que a classe é comparável a outros BigIntegers.

Por um pouco mais de esclarecimento neste caso, ter um olhar para o Em Javadocs para maiores Comparáveis no 1.5.Note que é declarado como Comparable<T>, e que o compareTo método recebe um argumento do tipo T.O T é um parâmetro de tipo que é "preenchida" quando a interface é utilizada.Assim, neste caso, declarando-lhe implementar Comparable<BigInteger> implica que você deve ter um compareTo(BigInteger o) o método.Outra classe pode implementar Comparable<String> o que significa que ele teria para implementar um compareTo(String o) o método.

Espero que você possa ver o benefício a partir do fragmento acima.Na 1.4, a assinatura do compareTo só podia tomar um Object desde todos os tipos de classes implementadas Comparáveis e não havia nenhuma maneira de saber exatamente o que era necessário.Com os genéricos, no entanto, você pode especificar que são comparáveis com relação a uma determinada classe e, em seguida, escreva um mais específico do método compareTo, que leva apenas que a classe como um parâmetro.

Os benefícios aqui estão duas vezes.Em primeiro lugar, você não precisa fazer um instanceof verificar e um elenco em seu método de implementação.Em segundo lugar, o compilador pode fazer muito mais a verificação de tipos em tempo de compilação - você não pode acidentalmente passar uma Seqüência de caracteres em algo que implementa Comparable<BigInteger>, uma vez que os tipos não correspondem.É muito melhor que o compilador seja capaz de apontar isso para você, ao invés de ter esta causa uma exceção de tempo de execução como teria geralmente aconteceu em não-código genérico.

Outras dicas

Tenho certeza de que são genéricos

http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html

Eu perguntei algo semelhante (c#) que tem informações úteis lá O que faz o métodou003CClassName> significa?

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