集合建模Java可移植性:路由不可移植<Stations>或路由。电台()?
在我的域中有Route
和Station
类。路线描述了车辆通过顺序站和行程元数据(操作员、公交车号等)的行程
因此,路线将有一个站点列表和一些附加元数据。此列表的某些帮助器方法也有必要,例如firstStation()和lastStation(),这里我有两个选项:
在路由类中实现它们:
public class Route implements Iterable<Station> {
// metadata
private List<Station> stations;
public Station firstStation() {
return stations.get(0);
}
public Station lastStation() {
return stations.get(stations.size() - 1);
}
@Override
public Iterator<Station> iterator() {
return stations.iterator();
}
// ...
}
唯一让我担心的是,路由提供了站点迭代器,这对开发人员来说可能不是很明显,尤其是在这种情况下:
for (Station st : route)
但对于第一个/最后一个方法,这看起来很自然:
Station st = route.firstStation();
另一个想法是创建自定义集合实现:
public class Stations implements Iterable<Station> {
private List<Station> stations;
public Stations(List<Station> stations) {
this.stations = stations;
}
public Station lastStation() {
return stations.get(stations.size() - 1);
}
public Station firstStation() {
return stations.get(0);
}
@Override
public Iterator<Station> iterator() {
return stations.iterator();
}
}
public class Routte {
private Iterable<Station> stations = new Stations();
public Iterable<Station> stations() {
return stations;
}
}
因此,这段代码更有意义:
for (Station st : route.stations())
这种方法更加冗长,需要一些技巧才能创建JPA映射
这个问题是关于您的个人偏好的,我很高兴听到您的建议和想法,您认为应该如何实现上述代码(以及为什么)
# 1 楼答案
由于您的自定义方法似乎在“路线”上运行,因此我会选择
这允许您将自定义方法添加到路由,并且仍然具有