我什么时候应该使用/嵌套类的例子?

时间:2009-10-11 00:34:48

标签: language-agnostic nested-class

请重新提出此问题以包含与之相关的语言

所以我的java书有一整章关于嵌套类,但最后说明你应该只在“建模组合关系和实现你想隐藏的类的内部”时才真正使用它们。因此,让我们讨论何时需要使用嵌套类和一些示例。

3 个答案:

答案 0 :(得分:3)

我对嵌套类的实际使用情况是在全局设置对象中。

父类是Singleton,嵌套类作为设置类别。

  • 设置
    • 文件设置
    • 打印设置

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

答案 1 :(得分:3)

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

java开发人员站点有一个嵌套类教程,其中有一个例子: http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html

一些使用示例:

  • 隐藏一个具体的实现 接口:

(考虑像Hibernate这样的工具的数据库会话):假设你有一个Session接口,以及一个SessionFactory,它返回一个Session实例。实现Session接口的SessionImpl具体类可以是知道如何构造和初始化它的工厂的内部类。

  • 通过实施提供信息 接口:

在Wicket Web框架中,每个GUI组件都有一个关联的“模型”,其作用是将数据连接到组件。界面看起来像:

public interface IModel extends IDetachable {
 public Object getObject();
 public Object setObject();
}

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

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

答案 2 :(得分:2)

我使用嵌套类来封装算法,这些算法通常作为一个包含大量参数的方法来完成。我使用具有原始数据的类,并将算法放入嵌套类的单独文件中(使用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(){...}
            ...