在 Java 中访问 Scala 元组元素的正确方法是什么?



我注意到Tuple我可以通过使用字段(例如_1(或方法(例如_1()(。出于任何原因(技术、佳能......

如果您分析标准库中Tuple2的定义:

final case class Tuple2[@specialized(Int, Long, Double, Char, Boolean/*, AnyRef*/) +T1, @specialized(Int, Long, Double, Char, Boolean/*, AnyRef*/) +T2](_1: T1, _2: T2)
extends Product2[T1, T2]

如果您将此定义复制到您自己的MyTuple2中并查看字节码,您确实会注意到_1_2被声明为公共字段。但是,如果删除字段上的@specialized注释,则该字段将变为私有字段,就像任何常规案例类一样。我找不到任何关于为什么会发生这种情况的信息,但它可能在 Scala 编译器文档中的深处。如果注释存在,则该字段将变为公共字段,即使该字段为空且未指定专用类型也是如此。

所以我会留下来,坚持使用_1()的方法,_2()安全。

相关内容