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'istruzione implementa ?
  • 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!

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top