我从使用guava Optional和Enums(getIfPresent)的旧组中获得以下代码。

// getNameAsString returns the string literal but I want to safely convert
// to an enum and return an java.util.Optional <MessageName>.
// MessageName is an enum
Optional<MessageName> msgName = Enums.getIfPresent(MessageName.class, obj.getMessage().getNameAsString());

如何将其转换为Java 8? java 8中的guava Enums.getIfPresent等效于什么,它将返回java.util.Optional?

最佳答案

您可以使用Java 8进行伪造,如下所示

import java.util.Optional;
Optional<MessageName> msgName = getValueOf(MessageName.class,obj.getMessage().getNameAsString());

 public static Optional<MessageName> getValueOf(Class<MessageName> enumType, String name){
            MessageName enumValue = null;
                    try{enumValue =Enum.valueOf(enumType, name);
                        }catch(IllegalArgumentException ex ){
                            //log this here
                        }
            return Optional.ofNullable(enumValue);
        }

静态方法getValueOf处理IllegalArgumentException

10-04 23:24