Recently, I was writing a class that I decided to be package-private (that is, no access modifier, or the default one). It has an inner class and some private helper methods, and one method intended to be used by a class in the same package. All of these class members are static. But then I had a thought: should this one method have the public access modifier or no access modifier, like the class containing it?
On one hand, since the class itself is package-private, it can only be accessed and used within its package, so there is no practical reason to make the method public. But at the same time, semantically, this method is intended to be a public feature of the class, that is, a feature of the class intended to be used externally, so it would make sense to modify its access as such.
For those that like to see code,
final class DummyRemover {
    private DummyRemover() {
    }
    public static int remove(Map<String, ClassNode> classMap) {
        return 0;
    }
    // ...
}
or,
final class DummyRemover {
    private DummyRemover() {
    }
    // Notice the modifier.
    static int remove(Map<String, ClassNode> classMap) {
        return 0;
    }
    // ...
}
What is the best choice here? Is there a rule of thumb for deciding what access modifiers to use in a case like this?
 
     
     
     
    