6

GoogleのGuavaImmutableSetクラスを使用して、時間的プロパティ(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タイプの一般的な説明の一部を失っています。

一般的な説明でアンパサンド記号に出くわしたことはなく、有効な構文ではないようです。

私が見逃しているJavaGenericsで多重継承を指定する方法はありますか?

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 に答える