Collection <! - ? - >和Collection <object>有什么区别?

时间:2016-03-21 20:43:24

标签: java collections

  

1.什么是收集&lt; ? &GT;

我测试了这段代码:

    Collection<?> l = new ArrayList<String>();
    l.add("s");

我无法添加&#34; s&#34; String.So what for for&lt; ? &GT; ?我会在哪些情况下使用它?

  

2. Collection&lt;之间的区别是什么? ? &GT;和集合&lt;对象&gt;

2 个答案:

答案 0 :(得分:0)

  1. 来自Oracle
  2.   

    Collection<?>(发音为&#34;未知&#34的集合;),即a   元素类型匹配任何东西的集合。它被称为通配符   因为显而易见的原因打字。

    1. 类型Collection<?>的变量是可以包含任何类型的集合。您的代码不知道将在该集合中放置什么类型的对象。这与Collection<Object>略有不同,Collection<?>是一个包含Object类对象的集合(它指定了Object,而不是说它可以除外)。 (这是java中每个对象的父级,包括String)。
    2. 您通常不想初始化void printCollection(Collection<?> c) { for (Object e : c) { System.out.println(e); } } ,因为您无法为其添加任何内容(据我所知)。

      但是,当您正在创建一个可以对ANYTHING集合进行操作的函数时,这非常有用。

      例如,您可以从oracle创建类似该示例的函数。

      void printCollection(Collection<Object> c) {
          for (Object e : c) {
              System.out.println(e);
          }
      }
      

      此方法将能够接受任何类型的集合。

      哪里

      Collection<Object>

      只能在Collection<String>上运行(即非String // fall back font if init() fails public volatile static Font fallbackFont = new Font("serif", Font.PLAIN, 24); public synchronized static Font myFont() { Font myFont; try { FileInputStream fis = new FileInputStream("res/fonts/gregorian.ttf"); myFont = Font.createFont(Font.TRUETYPE_FONT, fis); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); ge.registerFont(myFont); } catch (Exception e) { System.err.println("myFont font failed to load."); return fallbackFont; } return myFont; } ,即使String是Object的子类)

答案 1 :(得分:0)

  

1.什么是收集&lt; ? &GT;

move aaa bbb >nul 2>nul 指定其元素类型未知的Collection<?>。由于元素类型未知,因此您永远不会知道任何特定对象属于集合所接受的类型,因此向其添加任何内容都不是类型安全的。

另一方面,您始终可以假设您从此类集合中获取的任何元素都是Collection,并且您可以调用任何查询和元素删除方法。< / p>

这对于不依赖于集合元素类型的集合操作非常有用。

  

2. Collection&lt;之间的区别是什么? ? &GT;和集合&lt;对象&gt;

Object是一个可能有Collection<Object>个元素的集合。这两者是相似的,因为你不能对这种集合的元素类型做出任何假设,但它们完全不同,因为将任何对象添加到Object是安全的。 原因为什么你不能对元素类型做出假设,这些假设会产生重大影响:对于Collection<Object>,你不知道类型约束,但对于{{1是(你知道)没有约束。