Re: java - public interface - private menthods
Gianni Mariani <gi4nospam@mariani.ws> writes:
Say I have a class that exposes some interfaces. The intent is that
methods may be overridden by clients but only the class that defines the
interfaces are allowed to call them. [...]
So, how do you get java to enforce use visibility policy on interfaces ?
In Java, interfaces are ?declared?, which usually happens
outside of a class.
Most Java programmers do not write in C++ first and translate
to Java. They immediatly rush to code in Java and rarely miss
the friend keyword (yes, it sometimes happens).
To allow only certain other entities to call a method,
- you can either make it public and accept that violations
of the rule will not be enforced by the compiler.
You might use an additional style-checker instead, Or,
- you can use annotations and JSR 269 and to extend the
compilation process so as to enforce your rules. Or,
- you can pass a token object (at run-time) to all
objects that are intended to be your ?friends?.
This token then will be needed to do a specific call.
The token might be the target object itself. Its class
might use a private constructor, so that not everyone
can create instances. Then, it will create an object ?a?
internally using the private constructor and pass a
reference to ?a? to every other object ?o? that should be
allowed to call methods of ?a?. Now, every of the objects
?o? can call ?a?, because it holds a reference to it,
but one else can, because the constructor is private and
he does not has a reference.