найти элемент в списке статических финальных строк - PullRequest
0 голосов
/ 26 января 2011

У меня есть список статических строк:

static final String FOO = "foo";
static final String BAR = "bar";
static final String DUH = "DUH";
static final String GOO = "goo";
static final String ZUT = "zut";

Я хочу проверить, является ли данная строка частью этого списка, но хочу сохранить возможность ссылаться на каждый элемент отдельно.Я хочу, чтобы реализация проверки не знала об отдельных элементах.Так не так:

boolean isValid(String item) {
  return (item.equalsIgnoreCase(FOO) || item.equalsIgnoreCase(BAR) || ......)
}

Спасибо!Бас Хендрикс

Ответы [ 5 ]

6 голосов
/ 26 января 2011

Создать массив, содержащий все строки, и использовать цикл for, чтобы проверить, соответствует ли одна из них входной строке.

2 голосов
/ 26 января 2011

В зависимости от ваших ограничений Вы должны либо использовать Набор, либо Карту

A. Set <String> stringSet использовать stringSet.contains (foo) , чтобы проверить, выходит ли строка в наборе

B. Map<String,String> stringMap и используйте StringMap.containsKey (foo) , чтобы проверить, выходит ли строка на карте;

0 голосов
/ 26 января 2011

отражение. собрать все статические конечные поля String, объявленные в классе, и построить набор.

0 голосов
/ 26 января 2011

Другой подход: создайте Enum со статическим методом, чтобы проверить, является ли элемент действительным или нет:

enum MyEnum {
    FOO("foo"), 
    BAR("bar"), 
    DUH("DUH");

    private static final EnumSet<MyEnum> set = EnumSet.allOf(MyEnum.class);
    private String name;

    MyEnum(String name) {
        this.name = name;
    }

    public static boolean isValid(String item) {
        for (MyEnum e : set) {
            if (e.name.equalsIgnoreCase(item)) {
                return true;
            }
        }
        return false;
    }
}

Чтобы проверить, является ли элемент действительным членом перечисления, вы бы назвали:

MyEnum.isValid(item);
0 голосов
/ 26 января 2011

Создайте final, неизменный Set из Strings для проверки:

private static final Set<String> STRINGS = 
    Collections.unmodifiableSet(new HashSet<String>(
         Arrays.asList("foo", "bar", "DUH", "goo", "zut"));

public boolean isValid(String input) {
  return STRINGS.contains(input);
}

Если вы ограничены Java 1.4, просто удалите все шаблоны и все равно будет работать так же.

Если вы уже используете Guava (или хотите включить его), то вы можете сделать это определение более приятным (однако для Guava требуется Java 1.5 или более поздняя версия):

private static final Set<String> STRINGS = ImmutableSet.of("foo", "bar", "DUH", "goo", "zut");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...