【问题标题】:How can I suppress rawType of method reference?如何抑制方法引用的 rawType?
【发布时间】:2018-01-31 03:33:21
【问题描述】:

我有一个方法看起来像这样。

public <E extends Enum<E> & Some> void setOther(final E some) {
    setOther(ofNullable(some).map(e -> e.name()).orElse(null);
}

现在 IntelliJ 建议对 e -&gt; e.name() 部分使用方法引用。

我改变了它。

public <E extends Enum<E> & Some> void setOther(final E some) {
    setOther(ofNullable(some).map(Enum::name).orElse(null);
}

现在编译器会抱怨它。

... ....java:nnn: warning: [rawtypes] found raw type: Enum
        setOther(ofNullable(some).map(Enum::name).orElse(null));
                                      ^

输入@SuppressWarnings({"uncheked"}) 不起作用。

我怎样才能消除它?我应该坚持e -&gt; e.name()吗?

【问题讨论】:

  • 您使用的是什么编译器和版本?并请包括确切的警告。也许它甚至不是来自编译器,而是来自您安装的另一个源代码检查工具。 1.8.0_131 的 Javac 和 Eclipse 4.7.2RC2 的 Java 编译器都会为您的代码生成任何警告。 (它们最初确实会显示错误,因为您在前两个代码 sn-ps 中缺少右括号 )。)
  • 应该是Some::name吧?
  • 无论如何,如果警告是针对[rawtypes],你应该使用@SuppressWarnings("rawtypes")
  • Optional 不是 if/else 的一般替代品。你可以把这个方法写成setOther(some != null ? some.name() : null);,在我看来这更易读。它将完全消除泛型问题。
  • 虽然可以使用E::name 解决它,但我认为警告是编译器错误。另请参阅this answer

标签: java lambda method-reference


【解决方案1】:

改变

.map(Enum::name)

.map(E::name)

【讨论】:

  • 天哪。我从来不知道这个!
猜你喜欢
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 2020-04-04
  • 1970-01-01
相关资源
最近更新 更多