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

标签 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);

最佳答案

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

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

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

你确定不是Eclipse自己的编译器出错了?

关于java.util.Optional 和 java.lang.Class - 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28013970/

相关文章:

java - 如何在 Fragment 中使用 showDialog() 和 DatePickerDialog()?

Java:通过多个字段过滤集合和检索数据

java - 如何将类名用作数据类型?

python - __init__ 和 __call__ 有什么区别?

Python:如何在 doctest 中定义一个类?

java - 公式的含义如何在数组中找到丢失的元素?

java - Tomcat 无法在 Eclipse 中启动 - java.net.BindException : Address already in use

Android:如何避免在重新安装过程中丢失数据?

java - HttpServletRequest 类型未定义 getDispatcherType()

带有新参数的 Javascript 继承