Kotlin无法返回接口的实现?

时间:2019-04-21 12:07:25

标签: kotlin

不知道为什么,但是我似乎无法返回实现预期接口的数据类。

界面

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)
    }

方法,该方法返回实现AuthServiceResponse接口的AuthServiceBasicResponse类

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

example screenshot

1 个答案:

答案 0 :(得分:0)

仅出于完整性考虑,将在此处发布我的解决方案。非常感谢JB Nizet在上面的评论中为我指出了正确的方向。

我没有考虑的是使用泛型时的差异。

通过使用out关键字,可以在返回值中使用AuthServiceResponse的子类。

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

Kotlin团队here有一些很好的解释。

JB Nizet here分享的帖子