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