Che cosa < e > significa come implementa Comparable < BigInteger > ;?
-
19-08-2019 - |
Domanda
In Java 1.4.2 , classe java.math.BigInteger
implementa le interfacce Comparable
, Serializable
.
In Java 1.5.0 , classe java .math.BigInteger
implementa le interfacce Serializable
, Comparable < BigInteger >
.
Questo è solo un esempio per aiutarmi a chiedere <
e >
. Quello di cui mi sto davvero chiedendo sono le cose <
e >
.
La mia domanda è triplice:
- cosa significa la
< BigInteger >
dell'istruzioneimplementa
? - come si chiama quella sintassi?
- e cosa fa?
PS: è davvero difficile cercare su Google <
e >
ed è impossibile cercare SO per <
e > ;
in primo luogo.
Grazie!
Soluzione
Leggi il Java Generics Tutorial . La cosa tra le parentesi angolari è un parametro di tipo - Comparable è una classe generica, e in questo caso le parentesi angolari indicano che la classe è paragonabile ad altri BigInteger.
Per ulteriori chiarimenti in questo caso, dai un'occhiata al Javadocs per Comparable in 1.5. Nota che è dichiarato come Comparable < T >
e che il metodo compareTo
accetta un argomento di tipo T
. La T è un parametro di tipo che è "compilato" quando viene utilizzata l'interfaccia. Pertanto, in questo caso, dichiarare di implementare Comparable < BigInteger >
implica che devi avere un metodo compareTo (BigInteger o)
. Un'altra classe potrebbe implementare Comparable < String >
, il che significa che dovrebbe implementare un metodo compareTo (String o)
.
Spero che tu possa vedere i benefici dello snippet sopra. In 1.4, la firma di compareTo
poteva prendere solo un Object
poiché tutti i tipi di classi implementavano Comparable e non c'era modo di sapere esattamente cosa fosse necessario. Con generics, tuttavia, è possibile specificare che si è comparabili rispetto a una determinata classe, quindi scrivere un metodo compareTo più specifico che accetta solo quella classe come parametro.
I vantaggi qui sono duplici. In primo luogo, non è necessario eseguire un controllo instanceof
e un cast nell'implementazione del metodo. In secondo luogo, il compilatore può eseguire molto più controllo del tipo al momento della compilazione: non è possibile passare accidentalmente una stringa in qualcosa che implementa Comparable < BigInteger >
, poiché i tipi non corrispondono. È molto meglio che il compilatore sia in grado di indicartelo, piuttosto che avere questa causa un'eccezione di runtime come sarebbe generalmente accaduto in un codice non generico.
Altri suggerimenti
Sono abbastanza sicuro che sia Generics
http://java.sun.com /j2se/1.5.0/docs/guide/language/generics.html
Ho chiesto qualcosa di simile (C #) con informazioni utili lì Cosa significa Metodo < ClassName > significa?