Java 有必要创建一个内部类,将其用作外部类的实例变量?
我的问题是,仅仅因为我需要从这个类访问一个外部实例变量,所以创建一个内部类是否正确。但真正的问题是“将这个内部类也用作同一外部类的实例变量是否正确?” 在我的特定情况下,我有一个名为Java 有必要创建一个内部类,将其用作外部类的实例变量?,java,inner-classes,Java,Inner Classes,我的问题是,仅仅因为我需要从这个类访问一个外部实例变量,所以创建一个内部类是否正确。但真正的问题是“将这个内部类也用作同一外部类的实例变量是否正确?” 在我的特定情况下,我有一个名为Exam的外部类,并且应该有一个关联的结果,但是结果(它将是字符串或双精度)取决于ExamType(这是一个考试实例变量) 因此,我不确定最佳做法是: 要创建一个独立的结果类作为构造函数接收,请输入ExamType 创建一个内部Result类,该类可以轻松访问Exam实例变量(特别是ExamType变量),并将其实
Exam
的外部类,并且应该有一个关联的结果,但是结果(它将是字符串
或双精度
)取决于ExamType
(这是一个考试实例变量)
因此,我不确定最佳做法是:
- 要创建一个独立的
类作为构造函数接收,请输入结果
ExamType
- 创建一个内部
类,该类可以轻松访问Result
实例变量(特别是Exam
变量),并将其实例化为ExamType
类的实例变量Exam
结果的构造函数中传递ExamType
原因主要是可测试性:由于Result
仅依赖于显式传递给它的对象,因此很容易单独测试它的功能
另一个可能的原因是序列化:如果您只想序列化结果
对象,将其作为检查
的内部类将强制检查
与其一起序列化。通常这不是你想要的
Result
是顶级类还是静态嵌套类取决于您,这一决定取决于可读性。如果您的结果
类相对简单,并且考试
也不是很复杂,请使用静态嵌套类,否则,请使用单独的顶级类。您应该仔细阅读,选项1可能更干净,并且更易于单独测试。在构造函数中使用ExamType的单独结果类可能是一个好方法。它很干净。谢谢你干净的回答!我只想澄清一点,如果我决定将Result
设置为private static nested
类,并且我创建了一个Result
对象,这个对象无法访问Exam
类实例变量,所以我必须离开构造函数,因为这个类将作为顶级类,是吗?是的。静态嵌套类的行为与顶级类几乎完全相同。(唯一的区别在于对private
字段或方法的访问。)