2013-08-21 2 views
1

내가 작업중인 레거시 코드는 클래스에 대해 숫자로 명명 된 21 개의 속성을 사용합니다. 세 가지 다른 것들 ("firstThing", "secondThing"및 "thirdThing "). 그래서 나는 firstThing1, firstThing2, ... 내 class의 firstThing7 속성을 가지고 있고 secondThing과 thirdThing도 마찬가지이다.arraylist에서 숫자로 명명 된 변수에 값 지정

코드의 모든 부분에서 해당 클래스의 객체가 사용되는 곳에서 코드 번호가 인 코드가 정확하게 복사됩니다., 올바른 숫자로 명명 된 속성을 사용합니다. 별로 좋지 않습니다.

전체 그림을 변경하고 클래스를 다시 디자인하는 대신 적어도 작업중인 함수를 변경하고 싶습니다. 중복 코드로 루프를 수행하고 이전에 할당 된 특정 ArrayList에 값을 추가하십시오. 이제 ArrayList에서 모든 값을 가져 와서 특정 숫자로 명명 된 속성에 할당하는 방법이 있는지 알고 싶습니다. 또는 differents ArrayList의 길이를 테스트하고 그 많은 수의 속성에 값을 할당하는 방법은 무엇입니까? 아니면 그냥 복사해야합니까?

if(listOfFirstThings.size() >= 1) 
    myObject.setFirstThing1(listOfFirstThings.get(0)); 

if(listOfFirstThings.size() >= 2) 
    myObject.setFirstThing2(listOfFirstThings.get(1)); 

... 

21 회의 필요한 모든 작업을 할당 할 수 있습니까?

+0

코드를 [Daily WTF] (http://thedailywtf.com/)로 보냈습니다. ? –

답변

3

클래스를 다시 디자인하는 것은 입니다.가는 방법은입니다. 사실상 세 가지 컬렉션이 있습니다. 즉, 하나의 컬렉션이어야하며 각 요소는 세 가지 속성을가집니다.

Java는 실행 시간 생성 변수 이름을 사용하도록 설계되지 않았습니다. 너 수 있습니다 반사와 함께,하지만 난 강력하게 지금 당장 제대로 해결하는 것이 좋습니다. (나는 실제로 당신이 작업하고있는 새로운 기능을 추가하기 전에 리팩토링 단계로 이것을 할 것입니다.)

+0

글쎄, 지금 당장하고있는 일은 이미 새로운 기능을 추가하는 것보다 리팩토링에 더 많은 것입니다. 그래서 나는 그 방향으로 가서이 쓰레기를 유지 보수 가능한 것으로 바꿀 것입니다 : 감사합니다. – Willy

관련 문제