2012-09-23 2 views
2

JSoup 라이브러리를 사용하여 일부 웹 스크래핑을하고있는이 Java 응용 프로그램을 가지고 있습니다. 나는 라이브러리를 사용하고 있으며 그것들 중 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 문이나 default를 다루지 않습니다. –

+0

죄송합니다! 편집 됨. 아래에 4 개의 Case 문이 있다고 상상해보십시오. :) –

답변

1

이 질문은 모범 사례에 관한 것이므로 입력 목록으로 문자열 목록을 사용하는 자동차의 생성자를 제공하는 것이 좋습니다. 생성자는 어떤 방법 으로든 생성자를 생성하기 때문에 List of Strings에서 자동차 필드를 하나씩 초기화합니다. 즉, 자동차 인스턴스를 채우는 코드가 이제는 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)); 
... 

에 대해.