2012-06-13 293 views
0

早上好,我工作的一些Java代碼,我想做出這樣的事情:Java泛型:parametricise泛型類型

public class MyClass <E, T extends MyInterface<T<E>>> { } 

這樣,T應該既是一個通用的一個實例一個實現MyInterface類的類,它應該是E類型的參數。但是它似乎在Java中是不可能的,或者我對這個問題的解決方法是錯誤的。提前致謝。

更新:

首先感謝所有誰回答說,現在只是爲了把事情說清楚,讓你明白我想實現,我想使通用TDAS的通用容器。所以我們假設我們需要一個基於Integers的堆棧,然後我需要寫這樣的東西:MyContainer,當然我需要爲插入部分保留類型分隔,否則我可以寫MyContainer>。此外,由於我的所有TDAs都實現了MyInterface,所以我想將其設置爲綁定。 所以我想

public class MyContainer < E, T extends MyInterface < E>>
應該做的伎倆。

+0

可能與[2個泛型參數簡化Java類]的/重複(http://stackoverflow.com /問題/ 9245139 /簡化的Java類與 - 2-通用參數)。 –

回答

0

好像應該是

public class MyClass <E, T extends MyInterface<E>> { } 

public class MyClass <E, T extends MyInterface<T<E>>> { }

意味着T

應該是MyInterface<MyInterface<E>>這似乎不太可能。

編輯:

所以如果你需要MyInterface<Class1<Class2>>現在看來似乎應該是這樣的:

public class MyClass <A, B extends SomeClass<A>, C extends MyInterface<B> { } 

public class MyClass <E, T extends MyInterface<SomeOtherClass<E>>> { } 
+0

是的,但在我的想法中,當一個實現MyInterface的類應該像下面這樣實例化:MyInterface >,這就是爲什麼我想添加雙泛型。 – gr1ph00n

+0

但是你說「MyInterface」和Class1都需要實現MyInterface,並且必須是同一個類。所以如果Foobar使用MyInterface,那麼你可以做Foobar >。我想不出任何可能的情況。 – Jon

+0

請參閱編輯更新 –

0

我不知道,如果這就是你想要的,但我認爲它可能只是

MyClass<E, T extends MyInterface<E>> 

T<E>對我沒有多大意義。

1

這沒有意義。

public class MyClass <E, T extends MyInterface<T<E>>> { } 

由於最右邊的T.你爲什麼要參數化一個類與自己?我想你真正的意思是這樣的:

public MyClass<E, T extends MyInterface<E>> 

基本上意味着,每MyClass的,你需要一個E,和T MyInterface的實例,這反過來參數化與E.

我的工作我們發現初學者可能非常容易被泛型所淘汰,這會導致代碼完全無法讀取。謹慎使用泛型,並考慮在每個給定實例中是否真的需要它們。如果您發現自己編寫的代碼具有多層嵌套泛型參數化,那麼您可能在設計方面做錯了什麼。

1

基本上你正在嘗試做這樣的事情:

class MyClass<T<E>> // T has to be a generic class 

或本:

class MyClass<T<Integer>> // T has to be a generic with Integer as parameter 

你不能和不應該有這樣做,因爲它是meangingless。它不會告訴你任何有用的有關T.你可以使用任何類爲T這樣的:

DummyClass<T> extends Anything {}; 
MyClass<DummyClass<Integer>> myClass;