Language agnostic 什么时候应该使用嵌套类的/示例?

Language agnostic 什么时候应该使用嵌套类的/示例?,language-agnostic,nested-class,Language Agnostic,Nested Class,请重新标记此问题,以包括与之相关的语言 因此,我的java书中有一整章都是关于嵌套类的,但最后指出,只有当涉及到“建模组合关系并实现要隐藏的类的内部结构”时,才应该真正使用嵌套类。因此,让我们讨论一下何时需要使用嵌套类和一些示例 我在嵌套类中的一个实际用法是在全局设置对象中 父类是一个单例类,嵌套类作为设置类别 背景 文件设置 打印设置 等等 将内部对象作为单独的类是没有实际意义的,因为它们在设置类范围之外没有任何用处。嵌套/内部类只是一个只在另一个类的上下文中使用的类,而另一个类没有自

请重新标记此问题,以包括与之相关的语言


因此,我的java书中有一整章都是关于嵌套类的,但最后指出,只有当涉及到“建模组合关系并实现要隐藏的类的内部结构”时,才应该真正使用嵌套类。因此,让我们讨论一下何时需要使用嵌套类和一些示例

我在嵌套类中的一个实际用法是在全局设置对象中

父类是一个单例类,嵌套类作为设置类别

  • 背景
    • 文件设置
    • 打印设置
    • 等等

将内部对象作为单独的类是没有实际意义的,因为它们在设置类范围之外没有任何用处。

嵌套/内部类只是一个只在另一个类的上下文中使用的类,而另一个类没有自己的类文件。如果链接到实例,则只能在父类实例的上下文中实例化;它可以查看私有数据,如果是静态类,则只能查看私有静态数据

java developer站点有一个嵌套类教程,其中有一个示例:

以下是几个用法示例:

  • 隐藏 接口:
(考虑Hibernate等工具的数据库会话):假设您有一个会话接口和一个SessionFactory,它返回会话实例。实现会话接口的SessionImpl具体类可以是工厂的Inner类,它知道如何构造和初始化会话接口

  • 通过实施 接口:
在Wicket web框架中,每个GUI组件都有一个关联的“模型”,其工作是将数据连接到组件。界面看起来像:

public interface IModel extends IDetachable {
 public Object getObject();
 public Object setObject();
}
假设您有一些特殊的逻辑来检索您所编写的自定义GUI组件的数据。由于没有其他组件以相同的方式检索数据,因此可以在提供IModel的位置使用匿名类来处理数据检索。如果在同一个类中还有另一个点需要重用IModel实现,那么可以将其作为一个内部类。稍后,如果您在其他地方需要该模型,可以将其转换为顶级类


通常,在需要类定义的情况下使用内部类,但该类仅在父类的上下文中可用或有意义。

我使用嵌套类封装算法,这些算法通常作为具有大量参数的方法来完成。我使用具有原始数据的类,并将算法放入嵌套类中的单独文件中(使用partial关键字)。这样,我就可以为该算法设置属性,并且它的(工作)数据在算法完成后仍然有效。
   public partial class Network
    {
            partial void initFDLF()
            {
                fdlf=new FDLF(this);
            }

        public FDLF fdlf;
        public class FDLF
        {
            internal bool changed=true;
            internal bool pvchange=true;
            public double epsilon = 0.001;
            public bool fdlfOk=false;
            public void init(){...}
            public void run(){...}
            ...
我知道这在没有嵌套类的情况下很容易实现,但这感觉不错,因为算法是专门为父类构建的

   public partial class Network
    {
            partial void initFDLF()
            {
                fdlf=new FDLF(this);
            }

        public FDLF fdlf;
        public class FDLF
        {
            internal bool changed=true;
            internal bool pvchange=true;
            public double epsilon = 0.001;
            public bool fdlfOk=false;
            public void init(){...}
            public void run(){...}
            ...

旁注:有一篇有趣的文章(没有链接,对不起)是关于Sun对微软在微软Java中引入代理的回应。其要点是嵌套类比委托做得更好。这是导致Sun起诉MS并最终导致.Net和C#的问题之一。。。(我想这也总结了我对嵌套类的感觉——它们不会带来任何好处。:-)这个问题的可能重复项有一个“语言不可知”标记,部分类只存在于.net中