请重新提出此问题以包含与之相关的语言
所以我的java书有一整章关于嵌套类,但最后说明你应该只在“建模组合关系和实现你想隐藏的类的内部”时才真正使用它们。因此,让我们讨论何时需要使用嵌套类和一些示例。
答案 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(){...}
...