2012-05-11 74 views
6

我试图使用Google的Guava ImmutableSet类创建一组具有时间属性(java.util.Date和org.joda.time.DateTime)的不可变类。Java泛型类型转换难题

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泛型中的多重继承?

回答

17

基本上编译器试图让你变得聪明。它正在为您制定一些限制,并尝试将它们用于返回类型of

幸运的是,你可以通过被明确解决这个问题:

private static final ImmutableSet<Class<?>> timeLikeObjects = 
    ImmutableSet.<Class<?>>of(Date.class, DateTime.class); 

&部分有效的语法 - 这是你如何指定多种类型,例如边界

public class Foo<T extends Serializable & Comparable<T>> 

这意味着你只能为T它们实现SerializableComparable<T>指定类型。

+0

乔恩这是一个非常有启发性的回应。你的解决方案完美无缺。谢谢! :) –