早上好,我正在编写一些java代码,我想做这样的东西:
public class MyClass <E, T extends MyInterface<T<E>>> { }
这样,T应该既是泛型又是实现MyInterface的类的实例,并且应该是E类型的参数。但在Java中似乎不可能,或者也许我解决问题的方法是错误的。提前致谢。
更新:
首先感谢所有回复的人,现在只是为了让事情变得清楚并让您了解我想要实现的目标,我想制作一个通用 TDA 的通用容器。 假设我们需要一个基于整数的堆栈容器,那么我需要编写类似这样的内容:MyContainer,当然我需要将插入部分的类型分开,否则我可以编写MyContainer>。此外,由于我所有的 TDA 都实现了 MyInterface,所以我也想将其设置为绑定(bind)。 所以我猜
public class MyContainer < E, T extends MyInterface < E>>
应该可以解决问题。
最佳答案
这没有道理。
public class MyClass <E, T extends MyInterface<T<E>>> { }
因为最右边的T。为什么你想用它自己来参数化一个类?我认为您真正的意思是:
public MyClass<E, T extends MyInterface<E>>
这本质上意味着对于每个 MyClass,您需要一个 E 和一个 T MyInterface 实例,该实例又被参数化以与 E 一起使用。
我发现初学者可能对泛型非常着迷,这可能会导致代码完全不可读。谨慎使用泛型,并考虑在每个给定实例中是否真的需要它们。如果您发现自己编写的代码具有多层嵌套泛型参数化,那么您可能在设计方面做错了。
关于Java 泛型 : parametricise a generic type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11013229/