Heim Java javaLernprogramm So verwenden Sie die generische Java-Containersammlung

So verwenden Sie die generische Java-Containersammlung

Apr 19, 2023 pm 06:10 PM
java collection

Beginnen wir mit einem einfachen Beispiel:

<code>public void testGenerics() {<br>    Collection<Number> numbers = new ArrayList<>();<br>    numbers.add(1); // ok<br>    numbers.add(0.1); // ok<br><br>    Collection<? extends Number> numbers2 = new ArrayList<>();<br>    // don't work, you don't know which subtype 'numbers2' exactly contains<br>    numbers2.add(1); // oops!<br>}<br></code>
Nach dem Login kopieren

Dieses Beispiel ist tatsächlich etwas unmenschlich. Es wird geschätzt, dass die erste Reaktion der meisten Menschen (einschließlich mir) auf diese Konvertierung sein muss. Natürlich ist es richtig.“ (Das ist eine Falle), lassen Sie mich Ihnen sagen, was ich verstehe:

  • Collection: Zeigt an, dass diese Collection Objekte des Typs enthält Zahl, die Integer/Long/Float sein kann, da der Compiler feststellen kann, dass obj Instanz von Number == true; sein Collection/Collection, daher funktioniert der Aufruf von „numbers2.add(1)“ nicht, da der Compiler nicht weiß, um welchen Subtyp von „Number“ es sich bei dem in „numbers2“ enthaltenen Element handelt. Kompilierung Der Prozessor kann das Ergebnis der obj-Instanz von „UnknownType“ nicht ermitteln ;

  • Collection, dieser E-Typ ist „ein“ spezifischer Typ, nicht mehrere, die einen übergeordneten Platzhalter für den Seed-Typ darstellen; #

  • Ein weiteres Beispiel:
  • <code>public void testGenerics() {<br>    Collection<Number> numbers = new ArrayList<>();<br>    Collection<Integer> integers = new ArrayList<>();<br>    Collection<? extends Number> numbers2 = new ArrayList<>();<br>    <br>    numbers2 = integers; // ok<br>    numbers2 = numbers; // ok<br>    <br>    // don't work, Collection<Number> != Collection<Integer><br>    numbers = integers; // oops!<br>}<br></code>
    Nach dem Login kopieren

    Integer erbt eindeutig Number, also warum

    #🎜 🎜#
Collection == Collection

ist nicht wahr, schauen wir uns ein anderes Beispiel an:
    <code>public void testGenerics() {<br>    Collection<Integer> profits = new ArrayList<>();<br>    <br>    insertSomething(profits); // line 1<br>    <br>    Integer profit = profits.iterator().next(); // oops! crash<br>}<br><br>private void insertSomething(Collection<Number> numbers) {<br>    numbers.add(Long.MAX_VALUE);<br>}<br></code>
    Nach dem Login kopieren
  • Wenn Zeile 1 festgelegt ist, wird der nächste Gewinn erzielt Wenn es sich um eine negative Zahl handelt, werden bei einer Reihe nachfolgender Berechnungen Ausnahmen generiert. Wenn der Code nicht robust genug ist, wird möglicherweise sogar eine unerwartete RuntimeException ausgelöst, die dazu führt, dass die Methode abnormal beendet wird.

    In einem Satz: Collection dient der Laufzeitsicherheit und mögliche Ausnahmen bei der Typkonvertierung werden zur Kompilierzeit behoben.
  • Lassen Sie uns nun über Collection und Collection sprechen, und die erste Reaktion vieler Leute (einschließlich mir) muss sein: „

    Object ist die gemeinsame übergeordnete Klasse aller Java Objekte, sodass Collection jede Art von Sammlung darstellen kann

    “, schauen wir uns ein Beispiel an:

    <code>public void testGenerics2() {<br>    Collection<Integer> integers = new ArrayList<>();<br><br>    Collection<?> objects2 = integers; // ok<br>    // don't work, which type of 'objects2' contains is uncertain<br>    objects2.add(1); // oops!<br>    <br>    Collection<Object> objects = integers; // oops!<br>}<br></code>
    Nach dem Login kopieren

    Collection stellt eine umfassendere dar Bereich als Collection< ;Object>Large;

    Objects2.add(1) kann nicht aufgerufen werden, da der Compiler nicht genau ableiten kann, um welche Art von Datentyp es sich bei Containerobjekten2 handelt Verursachen Sie eine Ausführungstypkonvertierungsausnahme, wenn 🎜🎜#Collection keinen Sammlungstyp darstellen kann.
    • Warum stellt Collection tatsächlich das Risiko von Typkonvertierungsfehlern dar? 🎜🎜#
      <code>public void testGenerics() {<br>    Collection<Integer> integers = new ArrayList<>();<br><br>    Collection<Object> objects = integers; // oops!<br>    // don't work, which type of 'objects2' contains is uncertain<br>    objects.add("1");<br><br>    Integer one = objects.iterator().next(); // oops! crash<br>}<br></code>
      Nach dem Login kopieren
    • Collection kann Daten zum Container hinzufügen, da Object die übergeordnete Klasse aller Objekte und ein bekannter Typ ist, der anhand der obj-Instanz von Object beurteilt werden kann ;
    • CollectionDaten können nicht in den Container eingefügt werden, weil? (UnknownType) ein unbekannter Typ ist und das Ergebnis der obj-Instanz von UnknownType nicht beurteilt werden kann; 🎜#
    • #🎜 🎜#
    • ? Es stellt einen unbekannten Typ dar und Object stellt einen bekannten Typ dar. Dann wird der Absturz im obigen Beispiel definitiv passieren. . (Ein weiterer Online-Fehler)

    • Das obige ist der detaillierte Inhalt vonSo verwenden Sie die generische Java-Containersammlung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

      Erklärung dieser Website
      Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

      Heiße KI -Werkzeuge

      Undresser.AI Undress

      Undresser.AI Undress

      KI-gestützte App zum Erstellen realistischer Aktfotos

      AI Clothes Remover

      AI Clothes Remover

      Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

      Undress AI Tool

      Undress AI Tool

      Ausziehbilder kostenlos

      Clothoff.io

      Clothoff.io

      KI-Kleiderentferner

      AI Hentai Generator

      AI Hentai Generator

      Erstellen Sie kostenlos Ai Hentai.

      Heißer Artikel

      R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
      3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
      R.E.P.O. Beste grafische Einstellungen
      3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
      R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
      3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
      WWE 2K25: Wie man alles in Myrise freischaltet
      3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

      Heiße Werkzeuge

      Notepad++7.3.1

      Notepad++7.3.1

      Einfach zu bedienender und kostenloser Code-Editor

      SublimeText3 chinesische Version

      SublimeText3 chinesische Version

      Chinesische Version, sehr einfach zu bedienen

      Senden Sie Studio 13.0.1

      Senden Sie Studio 13.0.1

      Leistungsstarke integrierte PHP-Entwicklungsumgebung

      Dreamweaver CS6

      Dreamweaver CS6

      Visuelle Webentwicklungstools

      SublimeText3 Mac-Version

      SublimeText3 Mac-Version

      Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

      Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

      Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

      Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

      Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

      Armstrong-Zahl in Java Armstrong-Zahl in Java Aug 30, 2024 pm 04:26 PM

      Leitfaden zur Armstrong-Zahl in Java. Hier besprechen wir eine Einführung in die Armstrong-Zahl in Java zusammen mit einem Teil des Codes.

      Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

      Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

      Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

      Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

      Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

      Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

      Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

      In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

      Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

      Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

      See all articles