Ошибка на самом деле довольно проста.
Он находится в части toArray()
.
Если вы посмотрите на документацию , она скажет, что возвращает Array[AnyRef]
(Object[]
в Java) . Таким образом, вы потеряли его тип.
Существует много решений этой проблемы, таких как:
1) Использование asIsntanceOf
(не рекомендуется !!!) .
val filename = res.map(s3ObSummary => s3ObSummary.asIsntanceOf[S3ObjectSummary].getKey())
2) Использование сопоставления с образцом вместе с collect
(то же, что и выше, но более безопасно) .
val filename = res.collect { case s3ObSummary: S3ObjectSummary => s3ObSummary.getKey() }
3) Или, по моим личным предпочтениям, используя JavaConverters .
import scala.collection.JavaConverters._ // Provides the asScala extension method.
val basicCredentials = new AWSStaticCredentialsProvider(new BasicAWSCredentials(awsAccessKeyId, awsSecretAccessKey))
val s3 = AmazonS3ClientBuilder.standard()
.withCredentials(basicCredentials)
.build()
val res = s3.listObjects("myBucket").getObjectSummaries().asScala
val filename = res.map(s3ObSummary => s3ObSummary.getKey())
4) Как подсказал @AlexeyRomanov. Используя правильную форму toArray(T[])
.
val res = s3.listObjects("myBucket").getObjectSummaries().toArray(Array.empty[S3ObjectSummary])