如何通过2个参数在Java
返回枚举值我在Java如何通过2个参数在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)
但我不知道如何。有人能帮助我吗?
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;
}
您可以使用enum
的values()
方法来获取所有定义值的列表。然后,您可以遍历此列表,找到您感兴趣的值,并将这些值与作为参数发送给方法的值相匹配。
我只需要一个与两个参数 –
@ConstantineGladky相匹配的值,您可以循环'values()'返回的值来查找您正在查找的值。 'values()'将返回所有可能的'MockTypes'列表。如果循环性能是一个问题,你也可以创建一个'Map',缓存这些值。 – rid
如果你希望有一个“固定时间”的解决方案,不涉及查找值,最好的选择是在MockType
类中的静态块初始化一个恒定Map
。
如果你起来使用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);
}
}
(披露:我对番石榴贡献。)
的替代将是比较相似 - - 在静态块中构建一个Map<String, Map<String, LookupType>>
,并从那里进行查找 - 尽管这需要更多的工作。
为什么'equalsIgnoreCase'? (这真的不应该是你的默认设置。) –
@LouisWasserman如果他愿意,OP可以使用'equals()',这取决于他。 –
是的,但是...因为你建议它很奇怪。 'equals'是_default_,不是?并没有提到OP的意思是套管是一个问题? –