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
似乎是多余的,原因有两个:
FooBar
根本不关心T
.T
也可以从TFoo
和推断TBar
.因此,我的问题是,是否有办法强制执行这样的条件而不会混淆FooBar
类型参数列表.必须写FooBar<String, StringFoo, StringBar>
而不是理论上等同FooBar<StringFoo, StringBar>
于我看起来很难看.
不幸的是,没有更好的方法...编译器需要声明 T 类型才能使用它,并且没有其他地方可以声明它:
编辑:不相关的链接
如果未首先指定绑定 A,则会出现编译时错误:
Run Code Online (Sandbox Code Playgroud)class D <T extends B & A & C> { /* ... */ } // compile-time error
(摘自本文档)
这有点偏离主题,但本文档将类型参数名称的约定定义为单个大写字母。