2012-11-01 29 views
2

我有一個關於可以在Java中返回參數化泛型類型的方法的問題。忍受我,因爲我可能不會簡明地解釋它!假設我們有以下幾條:返回一個泛型類型的新實例,其中T設置爲給定arg的類型

public class SomeClass<T extends AnotherType> extends SomeSuperClass<T>{ 
    private AnotherType member;   

    public SomeClass(AnotherType at){ 
     member = at; 
    } 

    public SomeSuperClass<xxx> foo(AnotherType bar){ 
     return new SomeSuperClass<xxx>(bar); 
    } 

} 

所以我們有這個小工廠的方法'foo'。我可以用什麼來代替'xxx'來表示返回的新實例的參數化類型是'bar'對象的特定類型。例如如果bar是Bar類(AnotherType的一個子類),那麼我們將返回一個SomeSuperClass<Bar>(bar)的實例

我知道我可以使用'?'放置任何類型和有:

return new SomeSuperClass<?>(bar); 

,但我希望更具體使得:

return new SomeSuperClass<bar.class>(bar); 

我不能使用T,櫃面酒吧的類型是在SomeSuperClass層次更高?同樣只使用SomeClass<AnotherType>又太模糊了。

在這種情況下使用的語法是什麼?

回答

5

這個怎麼樣?

public <U extends AnotherType> SomeSuperClass<U> foo(U bar){ 
    return new SomeSuperClass<U>(bar); 
} 
+0

我誤解了你的構造函數,這絕對是一個簡潔的方式來處理它。 –

+0

是的,這似乎正是我需要的!我只是因爲某種原因才解決它!謝謝! – ComethTheNerd