Home Java javaTutorial How to use java generic container Collection

How to use java generic container Collection

Apr 19, 2023 pm 06:10 PM
java collection

Let’s start with a simple example:

1

<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>

Copy after login

This example is actually a bit anti-human. It is estimated that the first reaction of most people (including me) to this conversion must be "of course it is right" (this is I fell into a trap), let me tell you my understanding:

  • Collection: Indicates that this Collection contains all Number type objects, which can be Integer/Long/Float, because The compiler can determine that obj instanceof Number == true;

  • Collection: Indicates that this Collection is a Collection instance of "a subtype" of the Number type, which can be Collection< Integer>/Collection, so calling numbers2.add(1) will not work, because the compiler does not know which subtype of Number the element contained in numbers2 is, and the compiler cannot determine the result of obj instanceof UnknownType;

  • Collection, this E type is "a" specific type, and cannot be a placeholder representing multiple subtypes of a parent;

Another example:

1

<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>

Copy after login

Integer obviously inherits Number, so why

  • Collection == Collection

is not established, let’s look at an example:

1

<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>

Copy after login

If line 1 is established, then the next profit will be a negative number, and a series of subsequent calculations will sound abnormal. If the code If it is not robust enough, it may even throw some unexpected RuntimeException, causing the method to end abnormally or even the program to crash.

So in one sentence, Collection != Collection is for runtime safety, and possible type conversion exceptions will be resolved at compile time.

Now let’s talk about Collection and Collection. The first reaction of many people (including me) must be “Object is the common parent class of all java objects, so Collection< "Object> can represent any type of collection", let's look at an example:

1

<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>

Copy after login
  • ##Collection represents a larger range than Collection;

  • Objects2.add(1) cannot be called because the compiler cannot accurately infer which data type container objects2 is, and a runtime type conversion exception may occur;

  • The correct way to write a collection of any data type is Collection;

  • ##Collection cannot represent a collection of any type.

  • ##Why Collection does not represent a collection of any type? In fact, the compiler thinks there is a risk of type conversion errors:

    1

    <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>

    Copy after login

    Collection can add data to the container, because Object is the parent class of all objects and is a known type, which can be judged by obj instanceof Object;
    • Collection< ;?>Cannot put data into the container because? (UnknownType) is an unknown type and the result of obj instanceof UnknownType cannot be judged;

    • ##? It represents an unknown type, and Object represents a known type;


    • If Collection represents any type, according to Murphy's Law (what may happen will definitely happen ), then the crash in the above example is bound to happen. . (Another online glitch)

    • The above is the detailed content of How to use java generic container Collection. For more information, please follow other related articles on the PHP Chinese website!

      Statement of this Website
      The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

      Hot AI Tools

      Undresser.AI Undress

      Undresser.AI Undress

      AI-powered app for creating realistic nude photos

      AI Clothes Remover

      AI Clothes Remover

      Online AI tool for removing clothes from photos.

      Undress AI Tool

      Undress AI Tool

      Undress images for free

      Clothoff.io

      Clothoff.io

      AI clothes remover

      AI Hentai Generator

      AI Hentai Generator

      Generate AI Hentai for free.

      Hot Article

      R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
      3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
      R.E.P.O. Best Graphic Settings
      3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
      R.E.P.O. How to Fix Audio if You Can't Hear Anyone
      3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
      WWE 2K25: How To Unlock Everything In MyRise
      3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

      Hot Tools

      Notepad++7.3.1

      Notepad++7.3.1

      Easy-to-use and free code editor

      SublimeText3 Chinese version

      SublimeText3 Chinese version

      Chinese version, very easy to use

      Zend Studio 13.0.1

      Zend Studio 13.0.1

      Powerful PHP integrated development environment

      Dreamweaver CS6

      Dreamweaver CS6

      Visual web development tools

      SublimeText3 Mac version

      SublimeText3 Mac version

      God-level code editing software (SublimeText3)

      Square Root in Java Square Root in Java Aug 30, 2024 pm 04:26 PM

      Guide to Square Root in Java. Here we discuss how Square Root works in Java with example and its code implementation respectively.

      Perfect Number in Java Perfect Number in Java Aug 30, 2024 pm 04:28 PM

      Guide to Perfect Number in Java. Here we discuss the Definition, How to check Perfect number in Java?, examples with code implementation.

      Random Number Generator in Java Random Number Generator in Java Aug 30, 2024 pm 04:27 PM

      Guide to Random Number Generator in Java. Here we discuss Functions in Java with examples and two different Generators with ther examples.

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

      Guide to Weka in Java. Here we discuss the Introduction, how to use weka java, the type of platform, and advantages with examples.

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

      Guide to Smith Number in Java. Here we discuss the Definition, How to check smith number in Java? example with code implementation.

      Java Spring Interview Questions Java Spring Interview Questions Aug 30, 2024 pm 04:29 PM

      In this article, we have kept the most asked Java Spring Interview Questions with their detailed answers. So that you can crack the interview.

      Break or return from Java 8 stream forEach? Break or return from Java 8 stream forEach? Feb 07, 2025 pm 12:09 PM

      Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

      TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

      Guide to TimeStamp to Date in Java. Here we also discuss the introduction and how to convert timestamp to date in java along with examples.

      See all articles