Java:建立类型参数之间的相关性

Sma*_*ker 7 java generics type-parameter

假设我们有两个通用的Java接口:Foo<T>并且Bar<T>,其中可能有许多实现.现在,假设我们想要将每个中的一个存储在一个类中,两者都使用相同的值T,但保持键入的确切实现:

public interface FooBar<T, TFoo extends Foo<T>, TBar extends Bar<T>> {
    TFoo getFoo();
    TBar getBar();
}
Run Code Online (Sandbox Code Playgroud)

以上,T仅用于强制执行该操作,TFoo并且TBar类使用相同的类型参数.添加此类型参数FooBar似乎是多余的,原因有两个:

  1. FooBar根本不关心T.
  2. 即使它确实如此,T也可以从TFoo和推断TBar.

因此,我的问题是,是否有办法强制执行这样的条件而不会混淆FooBar类型参数列表.必须写FooBar<String, StringFoo, StringBar>而不是理论上等同FooBar<StringFoo, StringBar>于我看起来很难看.

gti*_*non 2

不幸的是,没有更好的方法...编译器需要声明 T 类型才能使用它,并且没有其他地方可以声明它:

编辑:不相关的链接

如果未首先指定绑定 A,则会出现编译时错误:

 class D <T extends B & A & C> { /* ... */ }  // compile-time error
Run Code Online (Sandbox Code Playgroud)

摘自本文档

这有点偏离主题,但本文档将类型参数名称的约定定义为单个大写字母。