2012-09-23 35 views
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++; 
} 
+0

恩,这个代码不会有效果只有两次?第三次'i == 3',你没有case语句或默认来处理。 –

+0

对不起!编辑。想象一下,还有4个案例陈述:) –

回答

1

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

该方法不需要创建Car实例的代码来手动初始化Car实例。无论有多少个不同的类创建Car,初始化代码都不会在每个类中重复。将初始化代码放入汽车本身促进了可重用性。这不是写什么类吗?

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)); 
... 

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

1

如何简单地

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

这看起来相当的可读性和足够简单给我。

相关问题