Инициализация чередующихся массивов в Kotlin - PullRequest
0 голосов
/ 07 октября 2019

Я хотел бы создать собственный массив в Kotlin.

class Node(val point: Point) {
    var neighbour : Array<Node?> = Array(4, {_ -> null})
    var prev : Byte = -1
}

Теперь в другом классе я попытался создать объект, подобный:

class OtherClass{
    var field: Array<Array<Node?>> = Array(size.x, {_ -> Array(size.y, {_ -> null})})
    }

Итак, в основном,Мне нужна таблица узлов, все инициализируются нулем. Предоставленные размеры имеют тип Integer.

Я получаю следующую ошибку:
Ошибка вывода типа. Ожидаемое несоответствие типов:
обязательно: Array >
найдено: Array

Ответы [ 2 ]

5 голосов
/ 07 октября 2019

Kotlin имеет функцию arrayOfNulls, которая может сделать это немного более элегантным:

val field: Array<Array<Node?>> = Array(4) { arrayOfNulls<Node?>(4) }

Или без дополнительных типов:

val field  = Array(4) { arrayOfNulls<Node?>(4) }

Iтем не менее, необходимо указать Node? как самый внутренний тип.

1 голос
/ 07 октября 2019

Хорошо, решение было довольно простым:

var field: Array<Array<Node?>> = Array(size.x, {_ -> Array(size.y, {_ -> null as Node?})})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...