2014-09-19 37 views
2

我想了解在Java泛型中使用<? super T>的目的是什麼。我讀了很多,但還沒有明白。對於我來說顯然對於我使用<T extends SomeClass>,如果類是SomeClass或SomeClass的子類,我們現在不需要確切類型的子類,我們只知道它具有超類SomeClass的方法,因此我們可以調用類似於T.someMethod();的方法。強大的功能。但我不明白使用<T super SomeClass>的目的。使用目的?超T或T超泛型中的SomeClass

我們寫這樣的通配符有什麼特權? T是SomeClass的超類,所以Super類可能沒有SomeClass的方法,我們只能確保SomeClass的超類具有Object的所有方法,所以這變得沒用,那麼使用它的目的是什麼?

+1

你讀過這樣的:http://stackoverflow.com/questions/2723397/java-generics-what-is-pecs – assylias 2014-09-19 04:46:33

回答

1

您可以使用? super T來表示下界通配符。假設你想開發一種可以將Double放入列表的方法。

public void foo(List<Double> d) {} 

但是如果你可以聲明這個方法就像

public void foo(List<? super Double> d) {} 

那麼你可以傳遞List<Double>List<Number>, and List<Object>。因此你獲得了更多的靈活性和可重用性。還有其他的方式來看待? super T是通過PUT原則

使用超級通配符時,你只把值放入結構。

+0

THX的答案,但名單和列表不兼容。我不能將對象放在列表中。 – ketazafor 2014-09-19 05:35:20

+0

顯然這就是爲什麼我提到「你可以通過」,我沒有提到你可以把 – sol4me 2014-09-19 05:36:33