When using private
and private[this]
do you know the difference?
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.
Looking for a way to make sure you’re using private[this]
every time? We enforce it on Codacy!
Enforceable today on Codacy
The post Difference between private and private[this]? appeared first on Codacy | Blog.