java.util.Optional with java.lang.Class - 奇怪的行为

时间:2015-01-18 19:39:56

标签: java eclipse class generics java-8

我尝试执行以下操作:

Class<?> clazz = Optional
        .ofNullable(settingsMap.get(key))
        .map(Object::getClass)
        .orElse(DBObject.class);

Eclipse在orElse上显示错误:“The method orElse(Class<capture#12-of ? extends Object>) in the type Optional<Class<capture#12-of ? extends Object>> is not applicable for the arguments (Class<DBObject>)”。

然后我尝试了以下内容,其中有效

Optional<Class<?>> opClazz = Optional
        .ofNullable(settingsMap.get(key))
        .map(Object::getClass);
Class<?> clazz = opClazz.orElse(DBObject.class);

我做错了吗?或者这是Java8中的错误吗?

-

编辑:完整示例:

Map<String, Object> settingsMap = new HashMap<>();

Class<?> clazz = Optional
        .ofNullable(settingsMap.get(""))
        .map(Object::getClass)
        .orElse(String.class);

1 个答案:

答案 0 :(得分:3)

这个(下面)在IntelliJ中运行良好:

    Map<String, Class<?>> settingsMap = new HashMap<>();

    Class<?> clazz = Optional
            .ofNullable(settingsMap.get(""))
            .map(Object::getClass)
            .orElse(DBObject.class);

你确定Eclipse自己的编译器没有失败吗?