2012-06-13 224 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;