2014-03-06 51 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