作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有泛型接口(interface):
public interface MyContainer<E>{
E someMethod();
}
现在我有另一个界面,我希望它是这样的:
public interface MyService<T extends MyContainer<E>>{
// someMethod goes here
}
它当然不能编译,它只能像这样编译:
public interface MyService<E,T extends MyContainer<E>>{
// someMethod goes here
}
但我不喜欢它,因为 MyService 接口(interface)不关心 E 它只关心它的类型参数扩展 MyContainer。有什么解决办法吗?
最佳答案
but I don't like it
开始喜欢它。
您必须在引用类型参数之前声明它们,就像在使用变量之前声明变量一样。
如果您关心 E
的类型,那么你必须声明它。界面MyService
关心E
如果它用 T extends MyContainer<E>
引用它.
如果你的界面不关心什么E
是的话,那么您可以使用无界通配符。
public interface MyService<T extends MyContainer<?>>
但是,此接口(interface)的每个实现都需要重新声明 T
完全像这样或提供完全满足此约束的类型参数。你将无法摆脱它 ?
.
您的声明E
并按原样使用它是我能看到的最佳解决方案。必须额外输入E,
没什么大问题。
关于java - 具有有界泛型接口(interface)的泛型接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51524855/
我是一名优秀的程序员,十分优秀!