【问题标题】:How to extend Collectors class [duplicate]如何扩展收集器类[重复]
【发布时间】:2019-02-25 11:43:42
【问题描述】:

为什么 Collectors 类在 Java 8 中是最终的?我想在我自己的类MyCollectors 中扩展 Collectors 类。在那里,我将添加 Collectors 类中不存在的其他方法。

【问题讨论】:

  • 嘿,我的问题不是在 java 中使用 final 类。请通过我的问题。我想将 Collectors 类扩展到 MyCollectors 类。
  • stackoverflow.com/questions/5181578/… 没有解决我的问题
  • Prasath,我已经阅读了你的问题。简单快速的答案是:您根本无法扩展 Collectors。更长的答案是,您的问题对社区几乎没有价值,因为 “为什么最终班级不能有孩子?”解释(在这种情况下从收集器继承的类)在上述question 中进行了解释。下面 Eran 的解决方案应该可以让您满意地理解为什么您的初始逻辑有缺陷。
  • 没有什么能阻止你创建一个名为 MyCollectors 的类并向其添加 Collector 工厂方法。子类化Collectors 应该有什么好处?

标签: java java-8 java-stream collectors


【解决方案1】:

Collectors 是最终的,因为它只包含 static 实用程序方法。它不能被实例化(它的构造函数是private),因此对它进行子类化没有意义。

您可以创建自己的MyCollectors 类,独立于Collectors。 或者,如果您想通过 MyCollectors 访问 Collectors 方法,您可以在 MyCollectors 类中创建所有 Collectors 静态方法的包装器。

【讨论】:

  • 是的,我想通过 MyCollectors 方法访问 Collectors 方法。 Wrappers 的意思是你想让我把 Collectors 类的所有方法复制到 MyCollectors 类吗?
  • @Prasath 表示复制方法签名并让 MyCollectors 方法调用相应的 Collectors 方法。不过,我不会这样做,因为这对我来说似乎毫无意义。
  • 如果他们在下次更新中在收集器类中添加另一个新方法会发生什么?我需要在 MyCollectors 类中做同样的事情吗?如果是,那么我的问题还有其他解决方案吗?
  • @Prasath 正如我所说,我不会做那种包装。只需将两个类(CollectorsMyCollectors)一起使用。您不需要一个类来包含所有收集器实用程序方法。
  • 好的,我将把我的方法单独放在 MyCollectors 类中。
【解决方案2】:

如果你需要实现自己的收集器,那就不是继承Collectors实用程序类,而是创建实现Collector接口的类。正如上面 Eran 所回答的那样

您可以创建自己的独立于收集器的 MyCollectors 类。或者,如果您想通过 MyCollectors 访问 Collectors 方法,您可以在 MyCollectors 类中创建所有 Collectors 静态方法的包装器。

您可以使用返回您自己的Collector 实现的方法创建自己的类

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2018-07-25
    相关资源
    最近更新 更多