为什么要在 Java 中公开私有内部类成员?

如果在 Java 中仍然无法在包含类之外访问私有内部类的成员,那么在 Java 中声明该成员的原因是什么?还是可以?

public class DataStructure {
    // ...

    private class InnerEvenIterator {
        // ...

        public boolean hasNext() { // Why public?
            // ...
        }
    }
}

答案 1

如果该类不扩展任何类或实现任何接口,我认为这是无稽之谈,因为没有其他类可以访问它的任何实例。InnerEvenIterator

但是,如果它扩展或实现任何其他非私有类或接口,则有意义。例如:

interface EvenIterator {
    public boolean hasNext();
}


public class DataStructure {
    // ...

    private class InnerEvenIterator implements EvenIterator{
        // ...

        public boolean hasNext() { // Why public?
            // ...
        }
    }

    InnerEvenIterator iterator;

    public EvenIterator getIterator(){
         return iterator;
    }     

}

答案 2

可以创建此方法以指示它在语义上是公共的,尽管编译器在此特定情况下不强制执行可见性规则。public

想象一下,在一些重构过程中,你需要使这个内部类成为顶级的。如果是这种方法,你将如何决定是否应该制作它,或者应该使用一些更严格的修饰符?声明方法告诉读者原作者的意图 - 此方法不应被视为实现细节。privatepublicpublic