我正试图围绕Scala语言,并认为最好的学习方法是将其付诸实践。在Java项目(Spring)和我的Scala项目之间复制粘贴代码时,IDE执行了我不理解的转换。在互联网和文档中搜索它不幸地让我没有任何工作。
代码:
@Bean private[context] def passwordEncoder: PasswordEncoder = {
return new BCryptPasswordEncoder
}
编译上面的代码时,编译器会抱怨:
`error: context is not an enclosing class`
有人可以解释private[context]
部分的含义吗?
答案 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节)。