请重新标记此问题以包含与其相关的语言
所以我的 Java 书有一整章是关于嵌套类的,但最后指出只有在“建模组合关系和实现要隐藏的类的内部”时才应该真正使用它们。因此,让我们讨论一下您何时想要使用嵌套类和一些示例。
请重新标记此问题以包含与其相关的语言
所以我的 Java 书有一整章是关于嵌套类的,但最后指出只有在“建模组合关系和实现要隐藏的类的内部”时才应该真正使用它们。因此,让我们讨论一下您何时想要使用嵌套类和一些示例。
我对嵌套类的实际使用是在全局设置对象中。
父类是一个单例,嵌套类作为设置类别。
将内部对象作为单独的类没有真正意义,因为它们在设置类范围之外对它们没有用处。
嵌套/内部类只是一个只在另一个类的上下文中专门使用的类,它没有自己的类文件。如果它链接到一个实例,它只能在父类实例的上下文中实例化;它可以看到私有数据,或者如果它是静态类,则只能看到私有静态数据。
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 实现,则可以将其设为内部类。稍后,如果您在其他地方需要该模型,则可以将其转换为顶级类。
通常,您在需要类定义的情况下使用内部类,但该类仅在父类的上下文中可用或才有意义。
我使用嵌套类来封装算法,这些算法通常作为具有大量参数的方法来完成。我使用具有原始数据的类,并将算法放入嵌套类中的单独文件中(使用部分关键字)。这样我就可以在算法完成后为该算法及其(工作)数据设置属性。我知道没有嵌套类可以轻松完成,但这感觉不错,因为算法是专门为父类构建的。
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(){...}
...