作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我希望能够为在我们的 AWS 后端创建的所有服务客户端实现不同的 httpClient
设置和 credentialsProvider
。为此,我想使用 Java 泛型。
每当有人创建一个新的服务客户端时,我都想像这样使用它:
S3Client s3client = setupAwsClient(S3Client.builder())
.region(Region.EU_WEST_1)
.build();
我的 setupAwsClient
的未编译实现如下所示:
public <T extends AwsSyncClientBuilder<SdkSyncClientBuilder<...>, SdkClient> & BaseClientBuilder<S3ClientBuilder, SdkClient> T setupAwsClient(T client) {
return client
.credentialsProvider(credentialsProvider)
.httpClient(awsBaseClient);
}
问题是我必须指定的接口(interface)太多,功能看起来一团糟。
我的问题是:在 AWS SDK 中的所有服务客户端之间实现某些设置的简洁方法是什么?泛型是一个好的解决方案还是有更好的方法?
更新:public <T extends AwsSyncClientBuilder<?,?> & AwsClientBuilder<?, ?>> T setup(T clientBuilder) {
}
尝试这个也不行。即使 AwsClientBuilder
提供了 credentialsProvider
而 AwsSyncClientBuilder
也提供了 httpClient
。
最佳答案
这就是您要找的东西吗?
public <T extends AwsSyncClientBuilder<?, ?>> T setup(T clientBuilder) {
/* Do stuff to client */
return clientBuilder;
}
或者如果您希望设置方法调用构建:
public <C, T extends AwsSyncClientBuilder<?, C>> C setup(T clientBuilder) {
/* Do stuff to client */
return clientBuilder.build();
}
关于用于设置默认 AWS 客户端的 Java 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54292643/
我是一名优秀的程序员,十分优秀!