AWS已将“新AmazonS3Client()”弃用为“AmazonS3ClientBuilder.defaultClient()”。 “new AmazonS3Client()”返回“AmazonS3Client”,而“AmazonS3ClientBuilder.defaultClient()”返回“AmazonS3”。
解决方案1:将'AmazonS3'对象转换为'AmazonS3Client',如: 方法((AmazonS3Client)AmazonS3ClientBuilder.defaultClient())
解决方案2:将参数从“AmazonS3Client”更改为“AmazonS3”,如: 现有代码:方法(AmazonS3Client amazonS3Client) 新代码:方法(AmazonS3 amazonS3)
但是我不太愿意改变解决方案2,因为改变这将花费我很多努力和测试时间。
问题/问:还有其他办法吗?
答案 0 :(得分:2)
我想说这些是你唯一的选择。从类层次结构中可以看出AmazonS3
是一个接口,AmazonS3Client
是它的一个实现(还有一个实现AmazonS3EncryptionClient
)。始终建议program to an interface而不是编程到实现。这意味着您应该拥有(并且总是很好)类型AmazonS3
。
选项1
如果您对AmazonS3
到AmazonS3Client
进行类型转换,它会对您有用,因为我并没有真正看到它返回AmazonS3的任何其他子类。但是避免这种情况是件好事,因为事情可能在未来发生变化(但亚马逊很可能不会这样做,因为他们会知道客户会采用这种方法 - 但如果他们愿意打破他们的客户,这是一个可能性。) / p>
<强>选项2 强>:
您的第二个选项是最好的,因为您不仅可以解决问题,还可以清理代码。