【发布时间】:2019-01-21 15:02:35
【问题描述】:
我希望能够为在我们的 AWS 后端创建的所有服务客户端强制执行不同的 httpClient 设置和 credentialsProvider。为此,我想使用 Java 泛型。
每当 somone 创建一个新的服务客户端时,我都会像这样使用它:
S3Client s3client = setupAwsClient(S3Client.builder())
.region(Region.EU_WEST_1)
.build();
我不编译 setupAwsClient 的 impl 看起来像这样:
public <T extends AwsSyncClientBuilder<SdkSyncClientBuilder<...>, SdkClient> & BaseClientBuilder<S3ClientBuilder, SdkClient> T setupAwsClient(T client) {
return client
.credentialsProvider(credentialsProvider)
.httpClient(awsBaseClient);
}
问题是接口太多了,我必须指定功能看起来一团糟。
我的问题是:在 AWS 开发工具包中的所有服务客户端之间强制执行某些设置的干净方法是什么?泛型是一个好的解决方案还是有更好的方法?
更新:public <T extends AwsSyncClientBuilder<?,?> & AwsClientBuilder<?, ?>> T setup(T clientBuilder) {
}
尝试这个也不行。即使AwsClientBuilder 提供credentialsProvider 和AwsSyncClientBuilder 提供httpClient。
【问题讨论】:
标签: java amazon-web-services generics aws-sdk