【问题标题】:Type mismatch with Java generics and anonymous class类型与 Java 泛型和匿名类不匹配
【发布时间】:2014-05-02 15:48:32
【问题描述】:

我今天偶然发现了这个错误,我不完全明白问题是什么。

我有一个简单的界面

public interface MyInterface
{
}

然后,我尝试使用 of() 方法创建一个 Guava ImmutableSet,并传递一个匿名类实例。

ImmutableSet<MyInterface> a = ImmutableSet.of(new MyInterface()
{
});

编译器不喜欢它:

Type mismatch: cannot convert from ImmutableSet<new MyInterface(){}> to ImmutableSet<MyInterface>

ImmutableSet&lt;new MyInterface(){}&gt;是什么类型?我不熟悉这种语法。

【问题讨论】:

  • 试试&lt;? implements MyInterface&gt;。 (不确定)。 :-)
  • @durron597 我不同意。我面临的问题与匿名类直接相关。

标签: java generics anonymous-class


【解决方案1】:

这是 Java 8 中类型推断功能改进的一部分,它在其中起作用。在 Java 8 中,类型参数可以从使用表达式的上下文中推断出来。在这里,它被用于ImmutableSet&lt;MyInterface&gt; 变量的赋值表达式中。

这在 Java 7 中并非如此。

在 Java 7 中,你可以这样做

ImmutableSet<MyInterface> a = ImmutableSet.<MyInterface>of(new MyInterface() {
});

显式设置类型参数。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    相关资源
    最近更新 更多