0

早上好,我正在编写一些 java 代码,我想做这样的事情:

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

这样,T 应该既是泛型又是实现 MyInterface 的类的实例,并且应该是 E 类型的参数。但在 Java 中似乎不可能,或者我解决问题的方法可能是错误的。提前致谢。

更新:

首先感谢所有回复的人,现在只是为了让事情清楚并让您了解我想要实现的目标,我想做一个通用 TDA 的通用容器。所以假设我们需要一个基于整数的堆栈容器,那么我需要写这样的东西:MyContainer,当然我需要为插入部分保持类型分离,否则我可以写 MyContainer>。此外,由于我所有的 TDA 都实现了 MyInterface,因此我也想将其设置为绑定。所以我猜

public class MyContainer < E, T extends MyInterface < E>> 
应该做的伎俩。

4

4 回答 4

1

这没有意义。

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

因为最右边的 T。为什么要使用自身参数化一个类?我想你真正的意思是这样的:

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

这实质上意味着对于每个 MyClass,您需要一个 E 和一个 T MyInterface 实例,该实例又被参数化以与 E 一起使用。

我发现初学者可能会对泛型非常着迷,这会导致代码完全不可读。谨慎使用泛型,并考虑在每个给定实例中是否真的需要它们。如果您发现自己在编写具有多层嵌套泛型参数化的代码,那么您可能在设计方面做错了。

于 2012-06-13T11:04:22.887 回答
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

你不能也不应该这样做,因为它毫无意义。它没有告诉你任何关于 T 的有用信息。你可以像这样使用任何类作为 T:

DummyClass<T> extends Anything {};
MyClass<DummyClass<Integer>> myClass;
于 2012-06-13T11:13:45.457 回答
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>>> { }
于 2012-06-13T10:48:27.657 回答
0

我不确定这是否是你想要的,但我认为它可能只是

MyClass<E, T extends MyInterface<E>>

T<E>对我来说没有多大意义。

于 2012-06-13T10:49:29.340 回答