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

时间:2013-08-01 12:36:12

标签: 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();
}

上面,T的唯一目的是强制TFooTBar的类使用相同的类型参数。将此类型参数添加到FooBar似乎是多余的,原因有两个:

  1. FooBar实际上并不关心T
  2. 即使有,T也可以从TFooTBar推断出来。
  3. 因此,我的问题是,是否有办法强制执行此类条件而不会使FooBar的类型参数列表混乱。必须编写FooBar<String, StringFoo, StringBar>而不是理论等效FooBar<StringFoo, StringBar>看起来很难看。

1 个答案:

答案 0 :(得分:2)

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

编辑:不相关的链接 <击>

<击>
<击>   

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

 class D <T extends B & A & C> { /* ... */ }  // compile-time error
     

<击>(extract from this doc)   

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