我有一个包含一些系统常量的类,其中一些常量用于示例图像类型{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
}
}
答案 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.