从静态方法返回多个值的最佳数据结构

时间:2014-08-20 17:05:37

标签: java design-patterns

我正在编写一个具有静态方法的类,我的同事会在其客户端代码中调用该方法。该方法迭代一堆文件,更改其内容和名称。我想做的是回归一次成功/失败'值,然后是对文件所做更改的列表(不一定是正式的'列表')。

我尝试了什么

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

我的问题

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

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

3 个答案:

答案 0 :(得分:3)

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

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

" best"但是,答案取决于我们不知道的事情,例如:

  • 您环境中的其他库如何做到这一点?
  • 什么构成了"失败"?
  • 异常会更有意义吗?
  • 您是否需要记录重命名失败的每个文件等所有故障?

答案 1 :(得分:1)

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

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

无论如何我的两分钱。

答案 2 :(得分:0)

你真的需要考虑你的客户会对"成功/失败"以外的信息做些什么。状态。如果您确实需要更多功能,那么请考虑返回一个对象(您的类或您的类的子类),它有方法来进行客户可能需要的查询。这样,您使用的内部结构可以隐藏(或根据需要更改),但客户端界面不必更改。客户会看到类似的东西:

Transform result = Transform.fixFiles(...);

if (result.isSuccessful()) {
xxxx
}

changes = result.getChangeList();