2013-03-20 186 views
1

我希望返回類型參數是類型參數和方法參數類型參數的超類。泛型方法返回超類型的類型參數和方法參數類型參數

這編譯:

import java.util.List; 
interface Foo<A> { 
    <R, B extends R> List<R> eg1(List<B> unit); 
    <R> List<R> eg2(List<? extends R> unit); 
} 

但並不強制R必須是A的超也。我怎麼做?

實際上,我想要做的事喜歡在這些表示:

<B, R super A & B> List<R> func(List<B> unit); 
<B> List<? super A & B> func(List<B> unit); 

但是那些沒有編制的,當然。

有兩個目的,以這樣的:

  1. 我希望能夠將結果分配給任何超類A和B.
  2. 兩者在這種方法的實現,我需要的結果類型可以包括A和B兩者。所以編譯的第一個例子將不起作用,因爲它們不允許我在結果中放置一個A.
+1

如果允許'R'是任何超類型的'A',並且'B'被允許是'R'的任何子類型,那麼這相當於只允許'B'被允許爲任何東西,因爲' R'始終可以是Object。你想要完成什麼樣的實際任務?你認爲需要這些仿製藥? – 2013-03-20 22:19:27

+0

@LouisWasserman我在問題中添加了詳細信息以回答評論的第一部分。至於第二個......實際上,我應該先從事這方面的工作。實現這個接口導致了這個問題,我認爲這回答了我的問題。 – mentics 2013-03-20 23:08:45

回答

0

由於@LouisWasserman的評論,我開始了我應該做的所以先實施思考。某處必須指定要返回的類型。要麼在方法實現中進行硬編碼,要麼指定爲類型參數,參數類型參數等。無論規範在哪裏,都可以正確定義該接口方法的泛型。

換句話說,我試圖做的沒有意義,因爲你不能構造返回類型。

+0

你應該接受你自己的答案作爲你的問題的解決方案。 – 2013-03-21 00:42:44

+0

@TedHopp我必須等兩天才能這樣做。 – mentics 2013-03-21 04:14:50

1

我認爲你必須命名在類級別類型參數:

import java.util.List; 
interface Foo<Base, A extends Base> { 
    <B extends Base> List<Base> eg1(List<B> unit); 
    <R> List<R> eg2(List<? extends R> unit); 
} 
+0

+1一個很好的折衷... – dcernahoschi 2013-03-20 22:55:33

+0

謝謝,但這不是我想要做的事。你必須指定第二個類型參數。 – mentics 2013-03-20 23:05:57

相關問題