8

我在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)

但我不知道怎么做。有人可以帮助我吗?

4

3 回答 3

14
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;
}
于 2012-10-10T23:13:17.697 回答
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>>在静态块中构造 a,并从那里进行查找——尽管它需要更多的工作。

于 2012-10-11T00:26:38.577 回答
1

您可以使用enum'values()方法获取所有已定义值的列表。然后,您可以遍历此列表并找到您感兴趣的与作为参数发送到该方法的值相匹配的值。

于 2012-10-10T23:05:17.600 回答