我的问题是:如何创建指定类的所有常量列表?
这是否可以轻松实现?或者我只需要为此编写自己的(有点简单)解决方案?
让我提出一些代码:
public class StateOfSomeProcess {
private final static String STATE_A = "State A";
private final static String STATE_B = "State B";
private final static String STATE_C = "State C";
private final static String STATE_D = "State D";
public StateOfSomeProcess() {...}
public List<String> getListOfAllStates() {
List<String> list = new ArrayList<String>();
...
//I wish there was a method like this:
//list = this.getAllConstantsFromClass();
...
return list;
}
}
我知道enum
,但它似乎不符合我的需要。
如果我的问题不清楚或需要改进,请随时告诉我。
答案 0 :(得分:2)
你可以写
private static List<String> getListOfAllStates() {
List<String> list = new ArrayList<String>();
for (Field field : StateOfSomeProcess.class.getDeclaredFields()) {
int modifiers = field.getModifiers();
if( Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers) ) {
list.add(field.getName());
}
}
return list;
}
答案 1 :(得分:1)
我看到三个选项。
选项1 - 自己创建一个ArrayList或数组
优点:快速而简单 缺点:容易过时
选项2 - 使用反射
优点:它始终是最新的 缺点:运行较慢(如果只执行一次,则极不可能出现问题),更难阅读代码
选项3 - 以字符串形式读取文件
优点:它也是最新的。 缺点:为您提供字符串,但不提供Java引用。我有时在编写单元测试时使用这种方法(例如,确认我没有忘记使用方法#1手动添加内容)
答案 2 :(得分:0)
这不是问的确切内容,但由于我必须获得
public class AnyNamesConstants {
public static final String CONST_1 = "Constant 1";
public static final String CONST_2 = "Constant 2";
public static Map<String, Object> getMapConstValue() throws IllegalAccessException {
Map<String, Object> map = new HashMap<>();
for (Field field : AnyNamesConstants.class.getDeclaredFields()) {
int modifiers = field.getModifiers();
if( Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers) ) {
list.put(field.getName(), field.get(field.getType()));
}
}
return map;
}
}
你会得到:
{
"CONST_1": "Constant 1",
"CONST_2": "Constant 2"
}