如何循环存储在类中的一些系统常量

时间:2015-03-30 16:05:13

标签: java loops

我有一个包含一些系统常量的类,其中一些常量用于示例图像类型{jpg, png,jpeg}

在另一个课程中,我正在检查所提供的扩展程序是否是systemConstants课程中受支持的扩展程序之一。

我想用循环进行这样的检查,我不想手动逐一进行。

为进一步澄清,如果用户输入了任何扩展名,我想检查它是否为有效扩展名,如下所示:

 if (ext != sysConstants.jpg || ext != sysConstants.jpeg || ext != 
    sysConstants.png) {
   //do smthing
 }

如何迭代这些常量?

更新

eclipse用红色突出显示枚举,并说无法解析为类型

public class EnumTest {

    public enum Ext {
        jpg,
        jpeg,
        png
    }
}

2 个答案:

答案 0 :(得分:1)

用户enum澄清您的代码:

public enum ImageTypes {
    JPG, PNG, TIFF 
}

然后你得到一个图像类型:

ImageType type = ext;

switch(ext) {
    case JPG:
      // do your stuff...
    break;


    // other cases

    default:
        // error;
    break;

}

答案 1 :(得分:1)

虽然您可以将常量存储在List中或声明枚举,但您可以使用反射来迭代类中的字段。

假设您的常量在类中声明为public static final,您可以执行

    for (Field f : YourClass.class.getDeclaredFields()) {
        f.setAccessible(true); // you need this if variables are private
        String name = f.getName();
        String value = (String) f.get(null);
    }

迭代所有字段。

  

还请告诉我为什么你使用null

我认为你的常数是静态的。如果不是,您应该在参数中使用实际的实例/对象。对于静态成员,您可以使用null。根据Java doc

If the underlying field is a static field, the obj argument is ignored; it may be null.