早上好,我正在研究一些java代码,我想做出类似的东西:
public class MyClass <E, T extends MyInterface<T<E>>> { }
通过这种方式,T应该是实现MyInterface的类的泛型和实例,并且应该是E类型的参数。但是它似乎不可能在Java中,或者我的方法可能是错误的。提前谢谢。
更新
首先感谢所有回复的人,现在只是为了让事情变得清晰,让你明白我想要实现的目标,我想制作一个通用TDA的通用容器。 所以假设我们需要一个基于Integers的Stacks容器,然后我需要编写类似的东西:MyContainer,当然我需要为插入部分保留类型,否则我可以编写MyContainer&gt;。此外,由于我的所有TDA都实现了MyInterface,我想将其设置为绑定。 所以我想
public class MyContainer < E, T extends MyInterface < E>>
应该做的伎俩。
答案 0 :(得分:1)
这没有意义。
public class MyClass <E, T extends MyInterface<T<E>>> { }
因为最右边的T.你为什么要自己参数化一个类?我认为你的真正含义是:
public MyClass<E, T extends MyInterface<E>>
这实际上意味着对于每个MyClass,您需要一个E和一个T MyInterface实例,该实例又被参数化以与E一起使用。
我发现初学者可能会厌倦了泛型,这会导致代码完全不可读。谨慎使用泛型,并考虑在每个给定的实例中是否真的需要它们。如果您发现自己编写的代码具有多级嵌套泛型参数化,那么您可能在设计方面做错了。
答案 1 :(得分: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;
答案 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>>> { }
答案 3 :(得分:0)
我不确定这是不是你想要的,但我认为它可能只是
MyClass<E, T extends MyInterface<E>>
T<E>
对我没有多大意义。