Java 从私有内部类访问外部类私有变量是一种糟糕的做法吗?

Java 从私有内部类访问外部类私有变量是一种糟糕的做法吗?,java,class,private,nested-class,Java,Class,Private,Nested Class,假设我们有 public class parent { private string x; private class child { void doSomething(){ System.out.println(x); } } } 当然,这是一个简单的例子,但一般来说,我应该像这样使用外部类中的私有变量,还是应该避免这种情况并通过构造函数中的参数将它们传递给内部类?功能可能不同。如果实例变量被重新分配,将

假设我们有

public class parent {
    private string x;
    private class child {
         void doSomething(){
              System.out.println(x);
         }
    }
}

当然,这是一个简单的例子,但一般来说,我应该像这样使用外部类中的私有变量,还是应该避免这种情况并通过构造函数中的参数将它们传递给内部类?

功能可能不同。如果实例变量被重新分配,将它们传递给构造函数将改变功能。有两份副本会使代码更难阅读

如果实例变量没有改变,并且类真的在一起,这可能是好的。确保内部类确实应该是一个。您使用这种技术将类紧密地耦合在一起,这使得重构更加困难


对于事件处理程序(一种常见的内部类类型)等,访问外部类的变量是常见的、合乎逻辑的。

可以做到吗?当然,如果可以做到,这是一个需要更多上下文的广泛问题。您必须回答的问题是,更改值是否会对类的状态产生不利影响?你有一个责任和控制的问题。使用setter/getter是否更好?如果父类扩展了
会发生什么?这对基类的可扩展性有何影响?它对子类有何影响?就我个人而言,我更喜欢依靠方法来访问/修改属性,但这可能不适用于您的特定用例……我想补充一点,只要您从未使用接口或超类类型将私有内部类的实例传递到父类之外(以防访问冲突),就可以了。此外,私有内部类中的方法比父类中的方法更复杂,因为每个父类可能有多个私有内部类实例,并且它们可能在争夺实例变量的控制权。所以最好只读取值,除非只有一个私有内部类的实例。