定位类中的第一个和第二个值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定位类中的第一个和第二个值相关的知识,希望对你有一定的参考价值。
在Kotlin的Pair数据类中,它需要2个值:
Pair<out A, out B>
这些值是通过first
和second
命名的属性:
Pair(first: A, second: B)
但是,如果这些属性不存在,那么第一个和属性如何被定位(例如,对于具有两个参数OtherClass<Int, Int>
的其他类? - 是否有另一种方法来定位它们?)
PS:为什么Pair
是数据类而不是常规类?
A和B不是属性,它们是类型参数。然后使用类型参数来定义属性。
这是对的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)"
}
您定位属性(first
和second
),而不是类型参数。
假设你有Pair<Int, String>
。这意味着A
是Int
,B
是String
。
first
是A
类型的财产,second
是B
类型的财产,因此first
是Int
和second
是String
。
在回答你的'PS'时,Pair是一个数据类,因为它赋予了usual benefits,例如生成的equals()方法。
qazxsw point表示一对通用的两个值,将其视为中间带有分隔符的框。它并不关心你放在分隔器两侧的东西。
什么是第一和第二:
如果你看看Robs答案,你会看到Pair类有两个公共值,一个是名字“first”而另一个叫“second”。它基本上意味着每个盒子(对)都有两面并且它不关心你放在哪一边,默认情况下我把一边称为“第一”而另一边是“第二”如果你想要左边的东西只是首先将它称为“第一个”,如果你想要从右侧获得某些东西,请将其称为第二个。
做Pair
只是意味着你想要一个盒子,一边拿着一个字符串而另一边拿着一个整数。
做Pair("Some Words", 99)
只是意味着你想要一个盒子,一边拿着一个字符串(值为1)而另一边拿着一个整数(100)你已经将这个盒子命名为myPair。
既然Kotlin并不关心你放入盒子里的东西的类型,那么就像在myPair = Pair("value 1", 100)
中添加一个空值一样是完全可以的,你的工作是检查是否有一个空值被添加或从中提取这对。
检索值:
假设您执行var myPair=Pair(null, 99)
之类的操作如果您想查看myPair中的内容,您可以执行以下操作:
myPair = Pair("value 1", 100)
为什么Pair是数据类而不是常规类?
数据类的主要目的是保存数据。数据类有一些限制,因此编译器可以为所有数据类添加一些标准功能,如eaquls(),hashCode()
Pair类意味着保存一对数据,因此可以从一些标准功能中受益,比如toString()。
你可以阅读详细资料println(myPair.first) -> "value 1"
println(myPair.second) -> 100
如果你看看如何实现HERE,你会发现它是一个简单的数据类,有两个属性:Pair
和first
。
second
因此,您可以使用以下语法显然访问这些属性:public data class Pair<out A, out B>(
public val first: A,
public val second: B
)
和pair.first
。第一个和第二个名称不是特殊关键字,只是属性名称。
请注意,一般情况下,对和数据类有一些特殊之处,可以在这里观察到:
pair.second
这种技术被称为val p = Pair(1, 2)
val (f: Int, s: Int) = p
println(f) //1
println(s) //2
,并且可以通过destructuring运算符实现,如果你使用componentX
类,它们会自动为你生成。
以上是关于定位类中的第一个和第二个值的主要内容,如果未能解决你的问题,请参考以下文章
函数如何使用 oracle 中的集合返回第二个和第四个值?答案是 42 和 46