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