2014-05-02 104 views
1

今天我偶然发现了这个错误,我并不完全明白问题所在。类型与Java泛型和匿名类不匹配

我有一个简单的界面

public interface MyInterface 
{ 
} 

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

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

编译器不喜欢它:

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

什么样的类型是ImmutableSet<new MyInterface(){}>?我不熟悉这个语法。

+0

尝试'<?实现MyInterface>'。 (不确定)。 :-) – Astrobleme

+0

[Java泛型类型转换拼图]可能的重复(http://stackoverflow.com/questions/10555773/java-generics-type-conversion-puzzle) – durron597

+0

@ durron597我不同意。我面临的问题与匿名类直接相关。 – GuiSim

回答

3

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

这在Java 7中

是不是真的在Java 7,你可以做

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

明确设置类型参数。