我今天偶然发现了这个错误,但我并不完全了解问题所在。

我有一个简单的界面

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<new MyInterface(){}>是哪种类型?我对这种语法不熟悉。

最佳答案

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

在Java 7中并非如此。

在Java 7中,您可以

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


显式设置类型参数。

10-08 13:28