【问题标题】:java.util.Optional with java.lang.Class - strange behaviourjava.util.Optional 和 java.lang.Class - 奇怪的行为
【发布时间】:2015-03-16 19:54:15
【问题描述】:

我尝试执行以下操作:

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

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

然后我尝试了以下方法,有效

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

【问题讨论】:

  • 嗯,似乎可以使用 javac(不是 eclipse)。你的settingsMap 是如何定义的?
  • 只是Map&lt;String, Setting&lt;?&gt;&gt; settingsMap = new HashMap&lt;&gt;();
  • 绝对是Eclipse 问题。

标签: java eclipse class generics java-8


【解决方案1】:

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

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

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

你确定不是 Eclipse 自己的编译器失败了吗?

【讨论】:

  • 看我上面的评论,它是Map&lt;String, Setting&lt;?&gt;&gt;
猜你喜欢
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 2011-10-04
  • 2017-07-04
  • 2019-02-16
  • 2013-06-03
  • 2014-09-30
相关资源
最近更新 更多