2

我有这个 Java 应用程序,我正在使用 JSoup 库进行一些网络抓取。我正在使用该库,它返回了其中 6 个字符串的集合。我需要将这 6 个随机字符串映射到对象的属性。我知道字符串的输入顺序以及什么数字映射到什么属性。我不觉得我的方法是处理这个问题的最好方法。感觉很迷茫,可读性很差,我只是想知道是否有更好的方法来做到这一点。我正在考虑使用枚举或单独使用这些行。长话短说,这里有一个代码片段。谢谢你的帮助。

List<String> strings = JSoup.getStrings();
Car car = new Car();
int i = 0;
for(String s : strings) {
    switch (i) {
        case 0:
            car.setMake(s);
            break;
        case 1:
            car.setModel(s);
            break;
        .....
    }
    i++;
}
4

3 回答 3

1

简单点怎么样

car.setMake(strings.get(0));
car.setModel(strings.get(1));
...

对我来说,这看起来非常可读和简单。

于 2012-09-23T16:19:12.287 回答
1

由于这个问题是关于最佳实践的,因此您应该考虑在 Car 中提供一个将字符串列表作为输入的构造函数。然后构造函数将从字符串列表中一一初始化汽车的字段,因为这就是构造函数的用途。这意味着用于填充汽车实例的代码现在将位于一个位置,即在 Car 类中。

这种方法将消除创建 Car 实例的代码手动初始化 Car 实例的需要。无论有多少不同的类创建一个 Car,初始化代码都不会在每个类中重复。将初始化代码放在汽车本身可以提高可重用性。这不就是编写类的目的吗?

于 2012-09-23T18:47:35.600 回答
0

我会这样写:

List<String> strings = JSoup.getStrings();
if (null == strings || strings.isEmpty() || MAX_SIZE != strings.size()) {
    throw new IllegalArgumentException("I don't know what you are talking about!");
}
Car car = new Car();
car.setMake(strings.get(0));
car.setModel(strings.get(1));
...

代码的读者很清楚,我希望列表中只有这么多值,并且每个元素都是汽车的特定属性。当一个新的属性被添加时,异常会让修改器知道他必须在这里做一些事情来处理这个新的属性。

于 2012-09-23T16:19:02.887 回答