如何将星形投影读入具有正确类型的变量(具体示例)?

时间:2018-03-20 23:01:55

标签: kotlin

var userAttributes = mapOf<Any?, Any?>()

val responseEntity = restTemplate.exchange(userInfoEndpointUri, HttpMethod.GET, entity, Map::class.java)

userAttributes = responseEntity.body // compilation error

导致编译错误:

Type inference failed. Expected type mismatch:
required Map<Any?, Any?>
found    Map<*,*>!

我发现自己一无所知必须声明 userAttributes 来保存这样的返回类型。

当我查看其他答案时,他们解释理论,但没有提供解决方案。我知道userAttributes的任何类型不正确我不知道什么是正确的类型(我知道它是 out of Any?哪个可以&#39;因为我不能使用*作为userAttributes的泛型类型而使用,导致&#34;不允许在函数和属性的类型参数上进行预测&#34;)

1 个答案:

答案 0 :(得分:0)

由于一些问题的读者将其标记为重复并指出理论答案以获得他们的盲点我会反向,我的问题的答案是将声明改为:

| posts_date | posts_id | user_ids |                                                                             Posts |                                                                                                                                                    EditMessages |            Users | edits_between |
|------------|----------|----------|-----------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|---------------|
| 2018-03-19 |        1 |        1 |  Author 1 Edit 1   // Author 1 Edit 2   // Author 1 Edit 3   // Author 1 Edit 4   |  First author's first edit to Post 1  // First author's second edit to Post 1  // First author's third edit to Post 1  // First author's fourth edit to Post 1  | 1 // 1 // 1 // 1 |             4 |
| 2018-03-19 |        2 |        1 |                                           Author 1 Edit 1   // Author 1 Edit 2    |                                                                                   First author's first edit to Post 2  // First author's second edit to Post 2  |           1 // 1 |             2 |
| 2018-03-19 |        1 |        2 |                                           Author 2 Edit 1    // Author 2 Edit 2   |                                                                                 Second author's first edit to Post 1  // Second author's second edit to Post 1  |           2 // 2 |             2 |
| 2018-03-19 |        2 |        2 |                                            Author 2 Edit 1   // Author 2 Edit 1   |                                                                                 Second author's first edit to Post 2  // Second author's second edit to Post 2  |           2 // 2 |             2 |

如果理解它的人更好地接受我的回答,并添加解释它的工作方式和原因以及原因:

var userAttributes : Map<out Any?, Any?>

没有 - 也就是为什么我不能将 out 用于var userAttributes = mapOf<Any?, Any?>() 或使用投影*,我很乐意接受它作为答案。