代码之家  ›  专栏  ›  技术社区  ›  Ellen Spertus

如何更正Scala构造函数的错误参数?

  •  0
  • Ellen Spertus  · 技术社区  · 6 年前

    我有一个Scala类,如图所示:

    class MyClass(title: String, value: Int) {
       ...
    }
    

    title 价值 null 标题 改为空字符串。我该怎么做?有比强迫更干净的方法吗 标题 为自己保密,提供一个消遣?

    def getTitle: String = if (title == null) "" else title
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Tim    6 年前

    从你的角度来看 title 值只是一个构造函数参数,因此不能从外部访问(是否省略了 val ?). 你可以用这个事实来计算 标题 像这样的成员:

    class MyClass(_title: String, val value: Int) {
      val title = if (_title == null) "" else _title
      ...
    }
    

    这保证了 标题 null 在任何情况下 MyClass


    为了完整起见,下面是可选的工厂方法实现:

    trait MyClass {
      def title: String
      def value: Int
    }
    
    object MyClass {
      protected class MyClassImplementation(val title: String, val value: Int) extends MyClass {}
    
      def apply(title: String, value: Int) =
        new MyClassImplementation(if (title == null) "" else title, value)
    }
    

    创建 是通过工厂方法,所以 支票总是打电话来的。

        2
  •  3
  •   Bob Dalgleish Denis K.    6 年前

    可以创建提供所需值的工厂方法。通常,在Scala中,这是在伴随对象中完成的:

    object MyClass {
      def apply( title: String, value: Int ): MyClass =
        new MyClass( if (title == null) "" else title, value)
    }
    
        3
  •  1
  •   Michael Yakobi    6 年前

    Scala鼓励您使用 Option 实现这一点的一种方法是使用二级构造函数:

    class ClassX(title: Option[String]) {
      def this(title: String) {
        this(Option(title))
      }
    }