我的域中有Route
和Station
个类。路线描述了车辆通过序列站和行程元数据(操作员,公交车等)所采取的行程。
因此,Route将有一个站点列表和一些其他元数据。此列表的某些辅助方法也有必要,例如firstStation()和lastStation(),这里有2个选项:
在路线类中实施它们:
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();
}
// ...
}
唯一让我担心的是路由提供了 Station 迭代器,对开发人员来说可能不是很明显,特别是在这种情况下:
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映射。
这个问题与您的个人偏好有关,我很乐意听取您对如何在您的意见中实施上述代码的建议和想法(及其原因)。
答案 0 :(得分:2)
由于您的自定义方法似乎在&#34; Route&#34;我会去
public class Route {
private List<Station> stations;
public Station firstStation() {
return stations.get(0);
}
public Station lastStation() {
return stations.get(stations.size() - 1);
}
public Iterable<Station> getStations() {
return stations;
}
private static class Station {
}
}
这允许您向Route添加自定义方法并且仍然具有
for (Station st : route.getStations())