2

请重新标记此问题以包含与其相关的语言

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

4

3 回答 3

3

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

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

  • 设置
    • 文件设置
    • 打印设置
    • 等等。

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

于 2009-10-11T00:45:08.283 回答
3

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

Java 开发者网站有一个嵌套类教程,其中有一个示例:http: //java.sun.com/docs/books/tutorial/java/javaOO/nested.html

几个使用示例:

  • 隐藏接口的具体实现:

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

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

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

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

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

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

于 2009-10-11T01:20:14.380 回答
2

我使用嵌套类来封装算法,这些算法通常作为具有大量参数的方法来完成。我使用具有原始数据的类,并将算法放入嵌套类中的单独文件中(使用部分关键字)。这样我就可以在算法完成后为该算法及其(工作)数据设置属性。我知道没有嵌套类可以轻松完成,但这感觉不错,因为算法是专门为父类构建的。

   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(){...}
            ...
于 2009-10-11T09:48:51.400 回答