在 Scala 中,受保护的关键字在类定义中意味着什么?



我正在学习Scala,从" Scala for the Invortient"中进行练习。一项练习要求:

文件stack.scala包含定义 class Stack[+A] protected (protected val elems: List[A])

解释protected关键字的含义。

有人可以帮我理解吗?protected显然对于成员变量很有意义,但是在类定义中它具有什么含义?

在Scala中,写作

class Stack[+A](elems: List[A]) 

还实现默认构造函数。如果您知道Java,那么在Java中,这将是

class Stack<A> {
    private List<A> elems; 
    public Stack<A>(List<A> elems){this.elems = elems;}
}

现在,您的示例中有两个protected关键字:

  • protected val elems: List[A]
  • protected (/*...*/)

第一个对elems进行了保护,这意味着只能通过Stack[+A]的子类访问(和阴影)。

第二个使构造函数受到保护,这意味着只能由Stack[+A]的子类创建一个新的Stack实例。

再次,等效的Java代码将是

class Stack<A> {
    protected List<A> elems; 
    protected Stack<A>(List<A> elems){this.elems = elems;}
}

相关内容

最新更新