Свойство расширения: объявление функции должно иметь имя. Неразрешенная ссылка: get - PullRequest
0 голосов
/ 24 июня 2019

Я использую функцию расширения для расширения retrofit2.Response объекта:

Отрывок:

public class ErrorResponse {
    private int code;
    private String message;
    private Response response;
}

import okhttp3.MediaType
import okhttp3.Protocol
import okhttp3.Request
import okhttp3.ResponseBody
import retrofit2.Response

fun Response<*>.errorResponse(): ErrorResponse {
    val errorResponse = ErrorUtils.parseError(this)
    return errorResponse
}

А здесь используйте:

viewModelScope.launch(Dispatchers.Main) {
            val response: Response<*> = TransportService.getTraidersList()
            if (response.isSuccessful) {
                finishLoadData()
                val traders: List<Trader> = response.body() as List<Trader>
                traderListLiveData.postValue(traders)
            } else { 
                val errorResponse = response.errorResponse()
                val message = errorResponse.message // here use extension function
                messageLiveData.value = SingleEvent(message)
            }
}

Nice. Это нормально работает.

Но я хочу использовать свойства расширения. Я пытаюсь это:

val Response<*>.errorResponse: ErrorResponse {
   get() = ErrorUtils.parseError(this)
}

Но я получаю ошибку компиляции:

Function declaration must have a name Unresolved reference: get

1 Ответ

1 голос
/ 24 июня 2019

Вам не нужны скобки для свойств.Это может выглядеть так:

val Response<*>.errorResponse: ErrorResponse
   get() = ErrorUtils.parseError(this)
...