【问题标题】:Java Typed Generics in Collectors收集器中的 Java 类型泛型
【发布时间】:2017-03-06 21:12:50
【问题描述】:

我是流和 java 的新手,我想知道在我的收集器方法中ArrayList::newArrayList<Node>::new 之间有什么区别.stream().collect(ArrayList???::new, (acc, x) -> acc.add(x), ..)

【问题讨论】:

  • new ArrayList<>() vs new ArrayList<Node>()
  • @shmosel 你是说new ArrayList()吗?
  • @Andreas 不,那将是原始类型。
  • @shmosel 是的,right。我想我应该知道的。 DOH!
  • 我现在明白你的意思了

标签: java java-stream


【解决方案1】:

我从未见过在任何地方使用过ArrayList<String>::new。 Collectors的javadoc有几个例子,都使用HashSet::new,或者TreeMap::new等。

据我所知,您只需要在类型推断无法找出正确的泛型类型时指定泛型类型,但我不记得发生过这种情况。

【讨论】:

  • 你不能总是使用 HashSet::new 或 TreeMap::new,我猜你会使用类型信息
  • Collectors.toCollection() 的源代码在方法调用中使用了显式类型,尽管在那里似乎没有必要。我曾经用它来解决一个 Eclipse 推理错误。我之前也需要obj::<T>method
【解决方案2】:

它们都是在 Java 中创建数组的不同方式。

new ArrayList<Node>()

上面的数组样式是一个泛型数组类型。这意味着您指定它是什么类型的数组列表。因此,在上面的示例中, 中的内容只是定义了它是什么类型的数组,例如字符串,或者它甚至可以是另一个类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多