2012-05-23 62 views
3

我有下面的類結構:Java的泛型類,如何使一個實例

public abstract class Generic<T extends SuperClass> 

public class SuperGeneric<T extends SuperClass & SomeInterface> 
    extends Generic<T> 

現在我想使SuperGeneric涵蓋所有可能的類的實例。我試過這樣:

Generic<? extends SuperClass & SomeInterface> myGeneric 
    = new SuperGeneric<? extends SuperClass & SomeInterface>(); 

現在這似乎不工作。 在Generic它給出了以下錯誤:Incorrect number of arguments for type Generic<T>; it cannot be parameterized with arguments <? extends SuperClass, SomeInterface>

並在new SuperGeneric我收到類似的錯誤:Incorrect number of arguments for type SuperGeneric<T>; it cannot be parameterized with arguments <? extends SuperClass, SomeInterface>

任何想法如何正確創建這個SuperGeneric的實例?

這個想法是,我有2個不同的類,滿足extends SuperClass & SomeInterface條件,但這些不能被一種類型推廣。

回答

2

當你想實例化一個泛型類,你需要提供的具體類型。你說有兩個類可以滿足約束條件。說這些是Type1Type2

那麼你應該能夠做到:

Generic<Type1> myGeneric1 = new SuperGeneric<Type1>(); 

Generic<Type2> myGeneric2 = new SuperGeneric<Type2>(); 

通配符僅用於申報。他們的意思是:你可以在這裏放置任何類型(即滿足給定的限制)

+0

那麼通配符在哪裏使用呢?在方法參數和返回類型? –

+0

@stevenroose見我最後一句 – hage

+0

對不起,謝謝! –

2

當你實例,你需要提供一個類型的編譯器填充。

+0

那麼通配符在哪裏使用呢?在方法參數和返回類型? –

+0

通配符描述T可以是什麼。但你實際上需要爲T提供一些東西。 – nsfyn55

+0

你正在混淆Class Literals和其他Generics特性。 – nsfyn55

相關問題