2011-10-31 2 views
1

나는 나는 변수 (이상 50)의 큰 숫자를 선언하는 자바에서이 클래스가 :클래스 변수를 배열에 저장 하시겠습니까?

 

    public static final String variable_1 = "value"; 
    .... 

나는이 모든 변수에 액세스하고 다른 클래스 내에서 목록에 넣어 싶습니다. for 루프를 사용하여이를 수행 할 수있는 방법이 있습니까?

+2

어레이에 저장하면 나에게 쓸모없는 소리가됩니다. – mre

+2

여기서'Daily WTF'의 냄새가납니다 : P –

+0

정적 최종 필드는 컴파일러에 의해 인라인 될 수 있습니다. 즉, 리플렉션을 사용하여 변경할 수는 있지만 상수를 사용하는 코드는 더 이상 런타임을 참조하지 않습니다. –

답변

0

이 같은 반사 API를 사용할 수 있습니다 다른 사람들이 말했듯이

for (Field f : MyClass.class.getDeclaredFields()) { 
    if (f.getName().startsWith("variable_")) { 
     System.out.println("Field " + f.getName() + " with value " + f.get(null)); 
    } 
} 

하지만, 이것은 아주 못생긴 아마도 나쁜 디자인 결정을 나타낸다.

+0

내 디자인이 아님 ... 나는 이것을 좋아해. 나는 그것을 확장 할 것을 주장했지만 ... 기존 코드는 변경하지 않는다. – schmimona

2

각 변수를 명시 적으로 참조하지 않고이 작업을 수행 할 수있는 유일한 방법은 reflection입니다.

그렇다면 더 좋은 방법은 코드를 리팩터링하여 그렇게 할 필요가 없다는 것입니다.

1

리플렉션을 사용하여 클래스 멤버를 검색하고 이름을 "variable_"과 같은 패턴으로 일치시킬 수 있습니다.

1

50 개가 있고 관련 상수 인 경우 열거 형 (또는 상수에 따라 여러 열거 형)으로 나타내야합니다. 그러면 자연스러운 그룹화를 제공하고 values ​​() 메서드를 통해 목록에 액세스 할 수 있습니다.

현재 코드 냄새와 같은 소리를 내고 있습니다.

관련 문제