当一种类型可以从另一种类型推断出来时,有没有办法避免重复泛型类型参数?

Pet*_*all 5 java generics

这是一个人为的例子,但比我的实际代码更容易解​​释:

public interface ContainerOwner<T, C extends Container<T>> {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我想避免T在该类型签名中重复,因为当参数本身具有参数时它变得难以处理,例如:

ContainerOwner<
     Optional<Future<Map<String, Integer>>>,
     List<Optional<Future<Map<String, Integer>>>>
> foo;
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我觉得第一个参数可以从第二个推断出来.这样做有诀窍吗?

Nic*_*tto 2

一种方法可能是使用更具体的子接口,该子接口仅需要一个类型参数,例如:

public interface ListOwner<T> extends ContainerOwner<T, List<T>> {
}
Run Code Online (Sandbox Code Playgroud)

那么你的代码将是:

ListOwner<Optional<Future<Map<String, Integer>>>> foo;
Run Code Online (Sandbox Code Playgroud)