Mat*_*lor 6 java generics guava
我正在尝试使用Google的Guava ImmutableSet类来创建一组具有时间属性的不可变类(java.util.Date和org.joda.time.DateTime).
private static final ImmutableSet<Class<?>> timeLikeObjects = ImmutableSet.of(Date.class, DateTime.class);
Run Code Online (Sandbox Code Playgroud)
我完全不知道为什么我得到这个编译错误(eclipse中的Java 1.6).
Type mismatch: cannot convert from ImmutableSet<Class<? extends Object&Serializable&Comparable<? extends Comparable<?>>>> to ImmutableSet<Class<?>>
Run Code Online (Sandbox Code Playgroud)
请注意,这有效:
private static final ImmutableSet<?> timeLikeObjects = ImmutableSet.of(Date.class, DateTime.class);
Run Code Online (Sandbox Code Playgroud)
但是我显然忽略了timeLikeObjects类型的一般描述的一部分.
我从未在通用描述中遇到&符号,并且它似乎不是有效的语法.
有没有办法在Java Generics中指定我刚刚缺少的多继承?
Jon*_*eet 17
基本上编译器试图为你聪明.它正在为你制定一些限制,并尝试将它们用于返回类型of.
幸运的是,您可以通过明确修复它:
private static final ImmutableSet<Class<?>> timeLikeObjects =
ImmutableSet.<Class<?>>of(Date.class, DateTime.class);
Run Code Online (Sandbox Code Playgroud)
该&部分是有效的语法 - 它是如何指定多种类型的边界,例如
public class Foo<T extends Serializable & Comparable<T>>
Run Code Online (Sandbox Code Playgroud)
这意味着您只能指定T实现Serializable 和的 类型Comparable<T>.