最佳实践:从字符串集合映射对象属性

时间:2012-09-23 16:09:47

标签: java android oop properties

我有这个Java应用程序,我正在使用JSoup库进行一些Web抓取。我正在使用该库,并且它返回了一系列Strings 6。我需要将这6个随机字符串映射到对象的属性。我知道字符串的顺序是什么,以及哪个数字映射到什么属性。我不觉得我的方法是解决这个问题的最佳方法。它感到失落,可读性糟透了,我只是想知道是否有更好的方法来做到这一点。我在考虑使用enum或者其他东西。长话短说这里是一段代码片段。谢谢你的帮助。

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++;
}

3 个答案:

答案 0 :(得分:1)

如何简单地

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

对我来说,这看起来非常简单易懂。

答案 1 :(得分:1)

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

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

答案 2 :(得分: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));
...

对于代码的读者来说,我希望列表中只有这么多的值,每个元素都是汽车的特定属性。添加新属性时,异常将让修饰符知道他必须在此处执行某些操作来处理新属性。