在 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()
的方法是安全的。
我注意到我可以通过使用字段(例如 _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()
的方法是安全的。