具有受限通用接口的通用接口

时间:2018-07-25 17:43:32

标签: java generics

说我有泛型接口:

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。有什么解决方法的想法吗?

1 个答案:

答案 0 :(得分:4)

  

但我不喜欢

开始喜欢它。

您必须在引用它们之前声明类型参数,就像在使用它们之前声明变量一样。

如果您关心E的类型,则必须声明它。如果接口MyServiceE引用它,它确实关心T extends MyContainer<E>

如果您的界面根本不关心E是什么,那么您可以使用无界通配符。

public interface MyService<T extends MyContainer<?>>

但是,此接口的每个实现都需要完全像这样重新声明T或提供完全满足此约束的类型参数。您将无法摆脱那个?

您声明E并按原样使用它是我所看到的最佳解决方案。不必键入额外的E,没什么大问题。