Guava getIfPresent()返回错误

时间:2018-06-07 18:14:28

标签: java enums guava

我正在尝试使用番石榴<div class="abc"> <ul> <li><a>Test</a></li> <li class="selected"><a>Test</a></li> </ul> </div>作为枚举,如下所示:

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(); } } 。据我所知,我完全遵循番石榴规格。我缺少什么想法?

1 个答案:

答案 0 :(得分:1)

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)。或者(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”

Guava使用枚举标识符,而不是您传递给构造函数的字符串。

因此,对于枚举实例,FINAL_MIX("FINAL MIX", PMCColumnsEnum.MIX_DATE.getColumnName());枚举标识符为“FINAL_MIX”,而不是您在“FINAL MIX”中传递的字符串

另外!由于您没有在string.toUpperCase上定义区域设置,因此存在turkey I bug的风险。