6

我正在尝试使用 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 泛型中指定多重继承?

4

1 回答 1

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 Comparable<T>的类型。

于 2012-05-11T17:17:51.623 回答