首页 > 解决方案 > 在 Java 中访问 Scala 元组元素的正确方法是什么?

问题描述

Tuple我注意到我可以通过使用字段(例如_1)或方法(例如)从 Java 中的 Scala 访问元素_1()。出于任何原因(技术,佳能......),是否有“更好”的方式来做到这一点?

标签: javascalascala-java-interop

解决方案


如果分析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()确保安全。


推荐阅读