2012-05-11 105 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

喬恩這是一個非常有啓發性的迴應。你的解決方案完美無缺。謝謝! :) –