Тип возврата - () -> MultipartBody.Part! вместо MultipartBody.Part - PullRequest
1 голос
/ 27 мая 2019

Я относительно новичок в лямбда-выражениях и был бы рад, если бы кто-нибудь мог объяснить, почему тип возвращаемого значения отличается от того, что я ожидал.Что такое () -> MultipartBody.Part! в любом случае?

Single.just{
    val file = bitmapToFile(context, fileName, image)
    // create RequestBody instance from file
    val requestFile = RequestBody.create(
        MediaType.parse("multipart/form-data")
        , file
    )

    // MultipartBody.Part is used to send also the actual file name
    return@just MultipartBody.Part.createFormData("picture", file.name, requestFile)
}

Ответы [ 2 ]

2 голосов
/ 27 мая 2019

() -> MultipartBody.Part описывает функциональный тип.Он описывает функцию, которая не принимает аргументов и возвращает MultipartBody.Part.Таким образом, компилятор жалуется, что вы возвращаете функцию, а не MultipartBody.Part, которую он ожидает.

Я предполагаю, что Single.just() не возвращает MultipartBody.Part, а скорее функцию, возвращающую?Я не знаком с фреймворком RX, поэтому я не могу быть уверен здесь.

0 голосов
/ 28 мая 2019

В дополнение к тому, что сказал @reckter, что является правильным, тип возвращаемого значения - лямбда, а не MultipartBody.Part объект из-за способа, которым вы вызываете Single.just.

Более подробно, Single.just принимает 1 аргумент типа T и возвращает Single<T>, как описано в javadoc . В вашем коде вы передаете лямбда (то есть что-то в форме { ... }) в качестве аргумента, поэтому вы получите обратно Single<lambda>. Обратите внимание, что вы можете опустить круглые скобки вокруг лямбды из-за синтаксиса Kotlin . Чтобы решить эту проблему, вы можете немного изменить свой код:

val file = bitmapToFile(context, fileName, image)
// create RequestBody instance from file
val requestFile = RequestBody.create(
    MediaType.parse("multipart/form-data")
    , file
)

val mySingle = Single.just(MultipartBody.Part.createFormData("picture", file.name, requestFile))
...