【问题标题】:Best Data Structure for Returning Multiple Values from Static Method从静态方法返回多个值的最佳数据结构
【发布时间】:2014-08-20 17:05:37
【问题描述】:

我正在编写一个具有静态方法的类,我的同事将在他们的客户端代码中调用该方法。该方法遍历一堆文件,更改它们的内容和名称。我想做的是返回一个“成功/失败”值,然后是对文件所做更改的列表(不一定是正式的“列表”)。

我的尝试

我目前的实现是构建一个 TreeMap,其中键是整数,第一个值(位置 0)是“成功”或“失败”。其余值(1 到 N)是所做更改的有序列表。

我的问题

如果你是我(尊敬的)同事,这个返回的数据结构对你来说是个好主意吗?有没有更优雅的设计模式适合这种情况?

我想让我的方法保持静态(根据我公司的实用程序标准),所以我想避免自定义数据结构/对象。非常感谢。

【问题讨论】:

  • 保持方法静态和创建自定义数据结构/对象返回是完全不相关的。

标签: java design-patterns


【解决方案1】:

我不会将状态嵌入完全由完全不同的事物组成的数据结构中。

听起来像一个普通的元组,例如,一个状态和一个代表任何东西的值对象。泛型通常用于表示这样的事情。

然而,“最佳”答案取决于我们不知道的事情,例如:

  • 您环境中的其他库是如何做到的?
  • 什么是“失败”?
  • 例外会更有意义吗?
  • 您是否需要记录所有失败,例如重命名失败的每个文件等?

【讨论】:

    【解决方案2】:

    如果您想要返回多个值或这样的复杂对象,自定义数据结构将非常适合。当您返回地图时,不太清楚该地图中的内容。当您确实有键/值对而不是有序列表时,应该使用映射。如果您有有序列表,请使用列表。

    您没有理由不能拥有由静态方法返回的自定义数据结构。然后你可以向它添加明确的方法来指示你实际返回的内容。支持代码的可读性,而不是如何最好地破解现有数据结构以满足您的需求。

    反正我的两分钱。

    【讨论】:

      【解决方案3】:

      您确实需要考虑您的客户会如何处理“成功/失败”状态之外的信息。如果您确实需要更多功能,请考虑返回一个对象(您的类或您的类的子类),该对象具有进行客户可能需要的查询的方法。这样,您使用的内部结构可以隐藏(或根据需要更改),但客户端界面不必更改。客户会看到如下内容:

      Transform result = Transform.fixFiles(...);
      
      if (result.isSuccessful()) {
      xxxx
      }
      
      changes = result.getChangeList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-26
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 2012-08-17
        • 2013-06-09
        • 1970-01-01
        相关资源
        最近更新 更多