有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

集合建模Java可移植性:路由不可移植<Stations>或路由。电台()?

在我的域中有RouteStation类。路线描述了车辆通过顺序站和行程元数据(操作员、公交车号等)的行程

因此,路线将有一个站点列表和一些附加元数据。此列表的某些帮助器方法也有必要,例如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) 个答案

  1. # 1 楼答案

    由于您的自定义方法似乎在“路线”上运行,因此我会选择

    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 {
    
        }
    }
    

    这允许您将自定义方法添加到路由,并且仍然具有

    for (Station st : route.getStations())