Guava getIfPresent () Неверный возврат - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь использовать getIfPresent() гуавы для перечисления, как показано ниже:

private enum LegalColumns
{

    PRODUCERS_CUT("PRODUCER'S CUT", PMCColumnsEnum.NETWORK_CUT_1.getColumnName()),
    PROPOSED_LOCKED_CUT("PROPOSED LOCKED CUT", PMCColumnsEnum.NETWORK_CUT_3.getColumnName()),
    LOCK("LOCK", PMCColumnsEnum.LOCKED_DELIVERY.getColumnName()),
    FINAL_MIX("FINAL MIX", PMCColumnsEnum.MIX_DATE.getColumnName());

    private String column;
    private String replacementColumn;

    LegalColumns(String column, String replacementColumn) {
        this.column = column;
        this.replacementColumn = replacementColumn;
    }


    public static LegalColumns getIfPresent(String column) {
        System.out.println(Enums.getIfPresent(LegalColumns.class, column.trim().toUpperCase()));
        return Enums.getIfPresent(LegalColumns.class, column.toUpperCase()).orNull();
    }
}

Однако, когда я делаю это, всегда выводится Optional.absent(), несмотря на то, что строки точно совпадают.Я точно следовал спецификации гуавы.Есть идеи, что мне не хватает?

1 Ответ

0 голосов
/ 08 июня 2018

https://google.github.io/guava/releases/15.0/api/docs/com/google/common/base/Enums.html#getIfPresent(java.lang.Class,%20java.lang.String)

Возвращает необязательную константу перечисления для данного типа, используя Enum.valueOf (java.lang.Class, java.lang.String).Если константа не существует, возвращается Optional.absent ().Обычный вариант использования - для анализа ввода пользователя или возврата к константе перечисления по умолчанию.Например, Enums.getIfPresent (Country.class, countryInput) .or (Country.DEFAULT);

https://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#valueOf(java.lang.Class,%20java.lang.String)

Возвращает константу перечисления указанного перечислениявведите с указанным именем.Имя должно точно соответствовать идентификатору, используемому для объявления константы перечисления в этом типе.(Посторонние пробельные символы недопустимы.)

Из вашего комментария

Я пошел с другим подходом, но для других я передал в столбцах типа "FINAL MIX".

"FINAL MIX"! = "FINAL_MIX"

Гуава использует идентификатор перечисления, а не строку, которую вы передаете в конструктор.

То же самое для перечислениянапример, FINAL_MIX("FINAL MIX", PMCColumnsEnum.MIX_DATE.getColumnName()); идентификатор перечисления - "FINAL_MIX", а не строка, которую вы передаете в "FINAL MIX"

ДОПОЛНИТЕЛЬНО!так как вы не определяете Locale в вашем string.toUpperCase, вы рискуете получить ошибку turkey I .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...