【问题标题】:how to handle arguments in auxiliary constructors before calling primary one?如何在调用主构造函数之前处理辅助构造函数中的参数?
【发布时间】:2019-04-10 07:23:20
【问题描述】:

我是 Scala 新手,但仍然面临一些新手(?)问题。

所以我有一个名为Transaction 的类,它的主构造函数有5 个参数。问题是我正在尝试使用 String 参数编写一个 1 参数构造函数,因此它从中获取其他参数并使用它们调用主构造函数(它基本上解析字符串)。

我已经读到辅助构造函数中的第一个调用必须是主构造函数,那么我应该如何在没有有用数据的情况下调用它?还有什么其他方法可以解决这个问题?

我在这里粘贴类代码和失败的构造函数:

class Transaction(srcIp: String, dstIp: String, var srcPort: Int, var dstPort: Int, _protocol: String) {
  def this(t_str: String) = {
    val t_arr = t_str.split(',')
    this(t_arr(1), t_arr(2), t_arr(3).toInt, t_arr(4).toInt, t_arr(5))
  }
  //primary constructor, private variables, etc
}

【问题讨论】:

    标签: scala constructor


    【解决方案1】:

    Scala 构造函数重载必须(且仅)调用另一个构造函数,主要的或辅助的。这是因为 Scala 中的默认参数直到 Scala 2.8 才进入该语言。

    如果你想以这种方式“解析”你的字符串,你可以创建一个伴生对象(参见here)并重载apply 方法来调用主构造函数(或任何重载的辅助构造函数)。

    【讨论】:

      猜你喜欢
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 2011-06-28
      • 2011-03-06
      相关资源
      最近更新 更多