【问题标题】:Private constructor in abstract class Scala?抽象类Scala中的私有构造函数?
【发布时间】:2015-02-21 18:13:57
【问题描述】:

我知道抽象类不能被实例化,所以也许我在回答我自己的问题,但是有没有办法将私有构造函数放在抽象类中?我的问题是我有一个抽象类,其中有两个子类具有完全相同的方法,并且一些方法以相同的方式完成,所以我想在抽象类中实现它们,但它们返回类的成员所以我想不出一种方法来返回我无法实例化的东西。我想返回 this(x) 但我不知道如果没有具有构造函数的抽象类我是否可以。

abstract class Storage {
    def +(other: Storage) : Storage = {
        var d=List()
        for (i<-other.length){
             d=this.element(i)+other.element(i)
        }    
        this(d) 
    }
}

where element 给出指定位置的元素,两个子类使用以List为参数的构造函数。

【问题讨论】:

    标签: scala abstract-class


    【解决方案1】:

    您正在寻找的是在某些语言(例如 Delphi)中名为“虚拟构造函数”的概念。 Scala 没有虚拟构造函数,但您可以使用虚拟工厂方法部分模拟它们,这对于您的用例来说已经足够了:

    abstract class Storage {
      def newLikeThis(d: List[Elem]): Storage
    
      def +(other: Storage): Storage = {
        ...
        newLikeThis(d)
      }
    }
    
    class StorageA(d: List[Elem]) extends Storage {
      def newLikeThis(d: List[Elem]): StorageA =
        new StorageA(d)
    
      ...
    }
    
    // same for StorageB
    

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      相关资源
      最近更新 更多