我在java中有这样的枚举类
public enum MockTypes
{
// Atlantis mocks
ATLANTIS_VERIFY("ATLANTIS", "verify"),
ATLANTIS_CREATE_RECORD("ATLANTIS", "createRecord"),
...
private String m_adaptor;
private String m_step;
private MockTypes( String adaptor, String step)
{
m_adaptor = adaptor;
m_step = step;
}
public String getAdaptor()
{
return m_adaptor;
}
public String getStep()
{
return m_step;
}
我必须实现通过适配器和步骤参数返回枚举值的方法。
public MockTypes getMockTypeByName(String adaptor, String step)
但我不知道怎么做。有人能帮助我吗?
答案 0 :(得分:11)
public MockTypes getMockTypeByName(String adaptor, String step)
{
for(MockTypes m : MockTypes.values())
{
if(m.getAdaptor().equals(adaptor) &&
m.getStep().equals(step)) return m;
}
return null;
}
答案 1 :(得分:2)
如果您想要一个不涉及查找值的“常量时间”解决方案,那么最好的选择是在Map
类的静态块中初始化常量MockType
。
如果你想要使用Guava,它实际上会相对令人愉快:
public enum MockType {
...
private static final ImmutableTable<String, String, MockType> LOOKUP_TABLE;
static {
ImmutableTable.Builder<String, String, MockType> builder =
ImmutableTable.builder();
for (MockType mockType : MockType.values()) {
builder.put(mockType.getAdaptor(), mockType.getStep(), mockType);
}
LOOKUP_TABLE = builder.build();
}
public static MockType getMockType(String adaptor, String step) {
return LOOKUP_TABLE.get(adaptor, step);
}
}
(披露:我向Guava捐款。)
替代方案将相对相似 - 在静态块中构造Map<String, Map<String, LookupType>>
,并从那里进行查找 - 尽管这需要更多的工作。
答案 2 :(得分:1)
您可以使用enum
的{{1}}方法获取所有已定义值的列表。然后,您可以遍历此列表,找到您感兴趣的值,这些值与作为参数发送到的方法匹配。