private[this] vs private

后端 未结 9 1053
悲哀的现实
悲哀的现实 2020-11-28 01:35

In Scala I see such feature as object-private variable. From my not very rich Java background I learnt to close everything (make it private) and open (provide accessors) if

9条回答
  •  一生所求
    2020-11-28 02:22

    When adding the scope to the private modifier (private[X]), it effectively behaves as a “up to” X, where X designates some enclosing package, class or singleton object.

    For example, private[bar], where bar is a package means that every instance of every class belonging to package bar can access whichever member the modifier is restricting.

    In the case of private[this], it means that the member is only accessible for each instance. This becomes more clear in the following example:

    class Foo(foo:Foo){  
       private[this] val i = 2
       println(this.i + foo.i)
    }
    
    >>error: value i is not a member of Foo
    
    class Foo(foo:Foo){  
        private val i = 2
        println(this.i + foo.i)
    }
    
    >>defined class Foo
    

    As you can see, the second Foo doesn’t have any problem since any instance can access the private val i. However for the first Foo there’s an error since each instance cannot see other instance’s i.

    It’s a good practice to write private[this] since it imposes a bigger restriction.

提交回复
热议问题