private [context]是什么意思

时间:2014-02-23 22:41:46

标签: scala

我正试图围绕Scala语言,并认为最好的学习方法是将其付诸实践。在Java项目(Spring)和我的Scala项目之间复制粘贴代码时,IDE执行了我不理解的转换。在互联网和文档中搜索它不幸地让我没有任何工作。

代码:

@Bean private[context] def passwordEncoder: PasswordEncoder = {
    return new BCryptPasswordEncoder
}

编译上面的代码时,编译器会抱怨:

`error: context is not an enclosing class`

有人可以解释private[context]部分的含义吗?

1 个答案:

答案 0 :(得分:4)

context只是一个占位符,您可以在其中填写您希望该方法为私有的上下文。这是可选的。如果您没有指定上下文,那么该成员将变为“class-private”,其行为与Java中的private类似。

背景:Scala提供了多个访问规范:对象 - 私有规范,即private[this],规定有问题的成员只能由在同一个对象上调用的成员看到,而不能从不同的对象看到,即使它们属于同一类型。您也可以使用包名称甚至this代替root,这是根命名空间的别名。

有关这方面的更多信息,请参见Scala Language Reference的“第5.2节 - 修饰符”:

  

private修饰符可以与模板中的任何定义或声明一起使用。

     

[...]

     

修饰符可以使用标识符C(例如private[C])进行限定,该标识符必须表示包含该定义的类或包。标有此类修饰符的成员只能分别从包C内的代码访问,或者只能从C类及其配套模块中的代码访问(第5.4节)。