O que fazer < e > significam tais como implementa Comparáveis<BigInteger>?
-
19-08-2019 - |
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 doimplements
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!
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?