Frage

Im Java 1.4.2, Klasse java.math.BigInteger Implementiert Schnittstellen Comparable, Serializable.

Im Java 1.5.0, Klasse java.math.BigInteger Implementiert Schnittstellen Serializable, Comparable<BigInteger>.

Dies ist nur ein Beispiel, das mir helfen kann, nachzufragen < und >. Was ich mir wirklich wundere, ist das < und > Sachen.

Meine Frage ist dreifach:

  • Was macht das <BigInteger> Teil von implements Aussage gemein?
  • Wie heißt diese Syntax?
  • Und was macht es?

PS: Es ist wirklich schwer zu googeln für Google < und > und unmöglich zu suchen < und > an erster Stelle.

Vielen Dank!

War es hilfreich?

Lösung

Lies das Java Generics Tutorial. Die Sache zwischen den Winkelklammern ist ein Typparameter - vergleichbar ist eine generische Klasse, und in diesem Fall bedeuten die Winkelklammern, dass die Klasse mit anderen Bigintlegern vergleichbar ist.

Schauen Sie sich das in diesem Fall ein bisschen mehr Klärung an die Javadocs für vergleichbar in 1,5. Beachten Sie, dass es als als deklariert wird Comparable<T>, und das die compareTo Methode nimmt ein Argument vom Typ T. Das T ist ein Typparameter, der "ausgefüllt" ist, wenn die Schnittstelle verwendet wird. In diesem Fall erklären Sie also, Sie implementieren Comparable<BigInteger> impliziert, dass Sie eine haben müssen compareTo(BigInteger o) Methode. Eine andere Klasse könnte implementieren Comparable<String> was bedeutet, dass es a implementieren müsste compareTo(String o) Methode.

Hoffentlich können Sie den Vorteil des oben genannten Snippets sehen. In 1.4 die Unterschrift von compareTo konnte immer nur eine nehmen Object Da alle Arten von Klassen vergleichbar implementiert wurden und es keine Möglichkeit gab, genau zu wissen, was benötigt wurde. Mit Generics können Sie jedoch angeben, dass Sie in Bezug auf eine bestimmte Klasse vergleichbar sind, und dann eine spezifischere Vergleichsmethode schreiben, die diese Klasse nur als Parameter nimmt.

Die Vorteile hier sind zweifach. Erstens müssen Sie keine machen instanceof Überprüfen Sie eine Besetzung in der Implementierung Ihrer Methode. Zweitens kann der Compiler bei der Kompilierung viel mehr Type prüfen Comparable<BigInteger>, Da die Typen nicht übereinstimmen. Es ist viel besser für den Compiler, Ihnen darauf hinweisen zu können, als dies zu einer Laufzeitausnahme zu haben, wie es im Allgemeinen in nicht generischerem Code stattgefunden hätte.

Andere Tipps

Ich bin mir ziemlich sicher, dass es Generika ist

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

Ich habe etwas Ähnliches gefragt (C#). Es gibt dort nützliche Informationen Was macht Methode?u003CClassName> bedeuten?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top