2014-03-06 5 views
3

저는 Java에 다소 익숙하며 특정 이름으로 정의 된 정적 변수의 개수를 검색 할 수 있는지 궁금합니다. 예를 들면 다음과 같습니다.java - 정적 변수 개수 정의

public static final String DB_CTRLDATA    = "controldata"; 
public static final String DB_CTRLDATA_CELLADDR  = DB_CTRLDATA + ".cell_addr"; 
public static final String DB_CTRLDATA_ID   = DB_CTRLDATA + ".id"; 
public static final String DB_CTRLDATA_PRICT  = DB_CTRLDATA + ".pri_count"; 
public static final String DB_CTRLDATA_RMODE  = DB_CTRLDATA + ".rmode"; 
public static final String DB_CTRLDATA_TOD   = DB_CTRLDATA + ".tod"; 
public static final String DB_DWELLDATA    = "dwelldata"; 
public static final String DB_DWELLDATA_FILENAME = DB_DWELLDATA + ".filename"; 
public static final String DB_DWELLDATA_ID   = DB_DWELLDATA + ".id"; 
public static final String DB_DWELLDATA_OFFSET  = DB_DWELLDATA + ".offset"; 
public static final String DB_DWELLDATA_SIZE  = DB_DWELLDATA + ".size"; 
public static final String DB_POSTPROC    = "postproc"; 
public static final String DB_POSTPROC_ID   = DB_POSTPROC + ".id"; 
public static final String DB_POSTPROC_PRESENT  = DB_POSTPROC + ".present"; 

DB_ *라는 이름으로 몇 개의 객체가 정의되었는지 알고 싶습니다. 이 모든 것을 배열에 두는 것이 해결책이라는 것을 이해합니다.

감사합니다.

+3

리플렉션을 사용할 수 있습니다. 그 정보로 무엇을하려합니까? –

+0

또한 개체에는 이름이 없습니다. 분야는 그렇다. –

+0

대답은 14입니다 :-) –

답변

5

이렇게하려면 리플렉션을 사용할 수 있습니다. Class.getDeclaredFields() 메소드를 사용하여 클래스에 정의 된 모든 필드에 액세스 할 수 있습니다. 그런 다음이 필드를 반복하고 Field.getModifiers()Modifier.isStatic(int)을 사용하여 수정자를 확인할 수 있습니다. 필드가 static 인 경우 Field.getName()이라는 이름을 확인할 수 있습니다. 짧은 예 : Class.getDeclaredFields()에 의해 던져 SecurityException 처리해야합니다

int count = 0; 
for (Field field : MyClassName.class.getDeclaredFields()) { 
    int modifiers = field.getModifiers(); 
    if (Modifier.isStatic(modifiers)) { 
     if (field.getName().startsWith("DB_")) { 
      count++; 
     } 
    } 
} 

참고.

0

더 좋은 방법은 enum을 사용하고 반사하는 것입니다. 반사는 "약간"느립니다 ^^. 그리고 프로덕션 환경에서는 SecurityException이 발생하지 않습니다.

public Example() { 

     DB[] aliases = DB.values(); 
     aliases[0].getAlias(); 
    } 

    public static final String DB_CTRLDATA    = "controldata"; 
    public enum DB{ 

     CTRLDATA("controldata"), 
     CTRLDATA_CELLADDR(DB_CTRLDATA + ".cell_addr"); 

     private String alias; 
     public String getAlias() { 
      return alias; 
     } 
     public void setAlias(String alias) { 
      this.alias = alias; 
     } 
     private DB(String a){ 
      a = alias; 
     } 
    } 
+0

Ofc. 내 잘못이야. 가치를 얻는 방법을 보여주었습니다 ^^ – s7474