在我的 CF 项目中,我正在使用 AWS Java 2.0 SDK,并且我正在尝试实现异步多部分上传,但在设置方面遇到了一些麻烦,特别是在创建BiConsumer Interface
.
文档:createMultipartUpload(CreateMultipartUploadRequest createMultipartUploadRequest)
要开始这个过程,我必须调用a3AsyncInterface.createMultipartUpload()
,所以我创建一个CreateMultipartUploadRequest
对象并将该对象传递给我的调用:
oCreateMultipartUploadRequest = createObject( 'java', 'software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest' ).builder()
.bucket( ARGUMENTS.bucket )
.key( ARGUMENTS.key )
.contentType( ARGUMENTS.fileMimeType )
.build();
oCreateMultipartUploadResponse = s3AsyncInterface.createMultipartUpload( oCreateMultipartUploadRequest );
所以到目前为止,这一切都很好。我的调用返回 type 的响应对象CompletableFuture<CreateMultipartUploadResponse>
,但这就是它开始崩溃的地方。
从CompletableFuture
,我想调用它的.whenComplete()
方法,但我不知道如何成功地做到这一点。
该.whenComplete()
方法采用类型BiConsumer<? super T,? super Throwable>
(docs)的对象,我不知道如何创建该对象。BiConsumer 是一个 Java 接口,因此它没有构造函数。我可以创建一个对象没问题,但这似乎并没有削减它。
oBiConsumer = createObject( 'java', 'java.util.function.BiConsumer' );
我无法.accept( t, u )
在此 BiConsumer 对象上调用该方法,因为我认为我没有正确设置它。它的.andThen()
方法需要另一个 BiConsumer 对象,所以我仍然必须首先弄清楚它。
所以我想我想在 Coldfusion 中做的是这样的(Java 中的示例):
BiConsumer< List<Integer>, List<Integer> > equals = ( list1, list2 ) ->
{
if ( list1.size() != list2.size() ) {
System.out.println( 'False' );
} else {
for ( int i = 0; i < list1.size(); i++ ) {
if ( list1.get( i ) != list2.get( i ) ) {
System.out.println( 'False' );
return;
}
}
System.out.println( 'True' );
}
};
equals.accept( lista, listb );
不确定我是否需要以.accept()
正确的方式调用该方法,或者当我将参数传递给.whenComplete()
. 我可能在执行这个特定操作时都错了,但没关系,当我到达那里时我可以弄清楚。我仍然想弄清楚如何正确设置 BiConsumer 对象,这似乎是 Java 中的一种流行模式,我希望能够使用它。
我希望能够做的是这样的事情:
oBiConsumer = createObject( 'java', 'java.util.function.BiConsumer<T, U>' );
但这似乎不受支持,我不确定是否有不同的语法来完成同样的事情。
我知道我可以继续创建动态代理和自定义 .jar 来创建/构建此功能,但这是唯一的出路吗?如果可能的话,我非常希望不必这样做;臭气熏天。
任何建议,将不胜感激。