我今天偶然发现了这个错误,但我并不完全了解问题所在。
我有一个简单的界面
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() {
});
显式设置类型参数。