Ориентация на первое и второе значения в классе - PullRequest
0 голосов
/ 27 февраля 2019

В классе данных Pair Kotlin он принимает 2 значения:

Pair<out A, out B>

, и эти значения предназначены для именованных свойств first и second:

Pair(first: A, second: B)

Однако как нацеливаются первое и свойства, если эти свойства не существуют (например, для других классов с двумя параметрами OtherClass<Int, Int>? - Есть ли другой способ нацеливания на них?)

PS: ПочемуPair класс данных, а не обычный класс?

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

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

Что такое Первый и Второй:

Если вы посмотрите на ответ Робса, вы увидите, чтоКласс Pair имеет два открытых значения: одно имя «first», а другое - «second».По сути, это означает, что у каждой коробки (пары) есть две стороны, и не важно, что вы положили в одну из сторон, по умолчанию я назвал одну сторону как «первую», а другую сторону как «вторую», если вы хотите что-то слева, простообращайтесь к нему как к первому, и если вы хотите что-то с правой стороны, обращайтесь к нему как к второму.

Выполнение Pair("Some Words", 99) просто означает, что вам нужен ящик, в котором одна сторона содержит строку, а другая сторона содержит целое число.

Выполнение myPair = Pair("value 1", 100) просто означает, что вам нужен ящик, который содержит одна сторонастрока (значение 1), а другая сторона содержит целое число (100), и вы назвали это поле myPair.

Так как Kotlin не заботится о типе вещей, которые вы кладете в коробку, чемсовершенно нормально, чтобы добавить нулевое значение в пару, например myPair=Pair(null, 99), ваша задача - проверить, есть ли добавленное или извлеченное нулевое значение из пары.

Получение значений:

Скажем, вы делаете что-то вроде var myPair = Pair("value 1", 100) Если вы хотите увидеть, что у вас есть в myPair, вы можете сделать:

println(myPair.first) -> "value 1"
println(myPair.second) -> 100

Почему Pair является классом данных, а необычный класс?

Основное назначение класса данных - хранить данные.Классы данных имеют некоторые ограничения, поэтому компилятор может добавить некоторые стандартные функции ко всем классам данных, такие как eaquls (), hashCode ()

Класс Pair предназначен для хранения пары данных, поэтому он может извлечь выгоду из некоторых стандартныхфункциональность, например, toString ().

Подробнее можно прочитать ЗДЕСЬ

0 голосов
/ 27 февраля 2019

Если вы посмотрите, как реализовано Pair, вы увидите, что это простой класс данных с двумя свойствами: first и second.

public data class Pair<out A, out B>(
    public val first: A,
    public val second: B
)

В результате вы, очевидно, можете получить доступ к этим свойствам с помощью следующего синтаксиса: pair.first и pair.second.Имена first и second - это не специальные ключевые слова, а просто имена свойств.

Обратите внимание, что в парах и классах данных в целом есть что-то особенное, что можно увидеть здесь:

val p = Pair(1, 2)

val (f: Int, s: Int) = p
println(f) //1
println(s) //2

Этот метод называется деструктурирование и становится возможным благодаря componentX операторам, которые автоматически генерируются для вас, если вы используете data классы.

0 голосов
/ 27 февраля 2019

A и B являются не свойствами, они являются параметрами типа.Затем параметры типа используются для определения свойств.

Это исходный код для пары:

public data class Pair<out A, out B>(
    public val first: A,
    public val second: B
) : Serializable {

    /**
     * Returns string representation of the [Pair] including its [first] and [second] values.
     */
    public override fun toString(): String = "($first, $second)"
}

Вы задаете свойства (first и * 1011).*), а не параметры типа.

Предположим, например, что у вас Pair<Int, String>.Это означает, что A - это Int, B - String.

first - это свойство типа A, second - это свойство типа B, поэтому first - это Int, а second - это String.

В ответ на ваш 'PS' Pair является классом данных из-за обычных преимуществ , которые это дает,например, сгенерированный метод equals ().

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