Kotlin не может вернуть реализацию интерфейса? - PullRequest
0 голосов
/ 21 апреля 2019

Не знаю почему, но я не могу вернуть класс данных, который реализует ожидаемый интерфейс.

interface

interface AuthServiceResponse {
    val statusCode: Int
    val data: AuthServiceResponseData
    val errors: List<AuthServiceResponseError>?
}

реализация

data class AuthServiceBasicResponse(override var statusCode: Int,
                                    override var data: AuthServiceResponseData,
                                    override var errors: List<AuthServiceResponseError>) : AuthServiceResponse

ожидание интерфейса AuthServiceResponse

    @PostMapping
    fun loginUser(@RequestParam username: String,
                  @RequestParam password: String): Mono<AuthServiceResponse> {
        return authenticationService.loginUser(username, password)
    }

метод, который возвращает класс AuthServiceBasicResponse, который реализует интерфейс AuthServiceResponse

fun loginUser(username: String,
              password: String): Mono<AuthServiceBasicResponse> {
...
}

example screenshot

1 Ответ

0 голосов
/ 23 апреля 2019

Просто ради полноты, выложу мое решение здесь. Большое спасибо JB Nizet в комментариях выше за то, что он указал мне правильное направление.

Чего я не учел, так это дисперсии при использовании дженериков.

Используя ключевое слово out, в возвращаемом значении можно использовать подклассы AuthServiceResponse.

@PostMapping
fun createUser(@RequestParam username: String,
               @RequestParam password: String): Mono<out AuthServiceResponse> {
    return authenticationService.createUser(username, password)
}

У команды Kotlin есть хорошее объяснение здесь .

Пост, опубликованный JB Nizet здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...