定位Class <int,int =“”>

时间:2019-02-26 21:29:35

标签: kotlin

在Kotlin的Pair数据类中,它有2个值:

Pair<out A, out B>

,这些值通过firstsecond命名的属性作为目标:

Pair(first: A, second: B)

但是,如果不存在第一个属性和属性,那么这些属性如何定位(例如,对于具有两个参数OtherClass<Int, Int>的其他类?-是否有另一种定位它们的方法?)

PS:为什么Pair是数据类而不是常规类?

3 个答案:

答案 0 :(得分:3)

A和B是 not 属性,它们是类型参数。然后使用类型参数定义属性。

这是配对的source code

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

您定位属性(firstsecond),而不是类型参数。

例如,假设您有Pair<Int, String>。这意味着AIntBString

first是类型A的属性,second是类型B的属性,因此firstInt和{ {1}}是second

为回答您的“ PS”,Pair是一个数据类,因为它授予了usual benefits,例如生成的equals()方法。

答案 1 :(得分:1)

Pair表示两个值的通用对,将其视为中间带有分隔符的框。不管您在分隔线的两边放什么。

什么是第一和第二:

如果您查看Robs Answer,则会看到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

为什么配对数据类而不是常规类?

数据类的主要目的是保存数据。 数据类有一些限制,因此编译器可以向所有数据类添加一些标准功能,例如eaquls(),hashCode()

Pair类用于保存一对数据,因此可以受益于某些标准功能,例如toString()。

您可以阅读详细信息HERE

答案 2 :(得分:0)

如果看一下Pair的实现方式,您会发现它是一个简单的数据类,具有两个属性:firstsecond

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

因此,您显然可以使用以下语法访问这些属性:pair.firstpair.second。名字first和second不是特殊的关键字,只是属性名称。

请注意,一般而言,对和数据类有一些特殊之处,可以在此处观察到:

val p = Pair(1, 2)

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

此技术称为destructuring,并且可以通过componentX运算符来实现,如果使用data类,这些运算符将自动为您生成。