【发布时间】:2018-09-26 13:12:32
【问题描述】:
我从 Java 转向 Scala。我想创建一个Outer 类,它定义(1)一个内部Inner 案例类和(2)一个返回Inner 对象列表的方法。请注意,在 Java 中,内部类的类型无疑是 Outer.Inner。
我发现有两种方法可以引用内部类的类型:outerObject.Inner 或Outer#Inner,正如here 所讨论的那样。 我应该使用哪个来返回 Inner 对象的列表?
例如,我可以这样实现我的 Scala 代码:
// Implementation 1
class Outer {
case class Inner(id: String)
def build(input: List[String]): List[Inner] = {
var result = scala.collection.mutable.ListBuffer[Inner]()
input.foreach { s =>
val inner = Inner(s)
result += inner
}
result.toList
}
}
或者像这样:
// Implementation 2
class Outer {
case class Inner(id: String)
def build(input: List[String]): List[Outer#Inner] = {
var result = scala.collection.mutable.ListBuffer[Outer#Inner]()
input.foreach { s =>
val inner = Inner(s)
result += inner
}
result.toList
}
}
唯一的区别是build() 返回List[Inner] 或List[Outer#Inner]。
假设我的代码的调用者运行这个:
val input: List[String] = List("A", "B", "C")
val outer = new Outer()
val output = outer.build(input)
那么对于实现 1,调用者看到输出是:
output: List[outer.Inner] = List(Inner(A), Inner(B), Inner(C))
对于实现 2,调用者看到:
output: List[Outer#Inner] = List(Inner(A), Inner(B), Inner(C))
Scala 中的首选(惯用)方法是什么?
相关问题:
【问题讨论】:
标签: scala