2014-03-06 52 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,則可以檢查其名稱uisng Field.getName()。簡單例子:

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

需要注意的是,你將不得不處理由Class.getDeclaredFields()拋出的SecurityException

0

我認爲更好的方法是使用枚舉然後反射。反射是一個「一點點」較慢^^。並在生產中你將不會有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