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

What's the correct way of accessing Scala tuple elements in Java?

我注意到我可以通过使用字段(例如 _1)或方法(例如 _1())从 Java 中的 Scala Tuple 访问元素).是否有 "better" 出于任何原因(技术、规范……)执行此操作的方法?

如果分析一下标准库中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 被声明为 public 字段。但是,如果您删除字段上的 @specialized 注释,该字段将变为私有,就像任何常规情况 class 一样。我找不到任何关于为什么会发生这种情况的信息,但它可能在 Scala 编译器文档的深处。如果注释存在,该字段将变为 public,即使它是空的并且没有指定专门的类型。

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