【发布时间】:2014-12-16 21:10:28
【问题描述】:
在 java 的一个方法中返回一对对象的 (1) 常见做法和 (2) 可能的解决方案是什么?
示例:假设我在 Model 中有一个 CheckersBoard 类,它有一个方法 f 接受 BoardFieldIndex start, BoardFieldIndex end 描述 View 要求的运动并返回一对 Figure f(如果 start 被占用) 和MovementVector v(如果它在董事会上是合法的)。
在 C++ 中,我有两个流行的选择:
(一)
Figure *f; MovementVector *v;
board.f( start, end, f, v );
(二)
Figure *f; MovementVector *v;
std::Pair<Figure*, MovementVector*> tuple = board.f( start, end );
f = tuple.first; v = tuple.second;
在 Java 中,我能想到的唯一解决方案是:
- 使用列表代替元组。但问题是我没有在那里定义类型,并且我认为不鼓励使用原始列表。
- 实现自定义泛型类 Pair。
我想知道最佳实践是什么,或者我怎样才能以一种对 Java 来说很自然的方式来做到这一点。我个人最喜欢(I.),但在这里是不可能的。我在其他解决方案中遇到的问题是,我访问元组元素的方式并不暗示它们包含什么,而且我认为这有点违背文学编程范式。
【问题讨论】:
-
我倾向于将 List
用于单一类型,例如String、Int 等。或者对于更复杂的值,创建我自己的 DTO 类来返回。 -
有关 Java 中的元组支持,请查看 javatuples。
-
DTO 方法的优点是它的属性可以比列表中的位置更好地表达意图——我更喜欢 Map 而不是 List,可能还有一个(轻量级的内部类? ) 地图上的 DTO