说我有泛型接口:
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接口并不关心E,它只关心其类型参数扩展了MyContainer。有什么解决方法的想法吗?
答案 0 :(得分:4)
但我不喜欢
开始喜欢它。
您必须在引用它们之前声明类型参数,就像在使用它们之前声明变量一样。
如果您关心E
的类型,则必须声明它。如果接口MyService
用E
引用它,它确实关心T extends MyContainer<E>
。
如果您的界面根本不关心E
是什么,那么您可以使用无界通配符。
public interface MyService<T extends MyContainer<?>>
但是,此接口的每个实现都需要完全像这样重新声明T
或提供完全满足此约束的类型参数。您将无法摆脱那个?
。
您声明E
并按原样使用它是我所看到的最佳解决方案。不必键入额外的E,
没什么大问题。