Language agnostic 什么时候应该使用嵌套类的/示例?
请重新标记此问题,以包括与之相关的语言Language agnostic 什么时候应该使用嵌套类的/示例?,language-agnostic,nested-class,Language Agnostic,Nested Class,请重新标记此问题,以包括与之相关的语言 因此,我的java书中有一整章都是关于嵌套类的,但最后指出,只有当涉及到“建模组合关系并实现要隐藏的类的内部结构”时,才应该真正使用嵌套类。因此,让我们讨论一下何时需要使用嵌套类和一些示例 我在嵌套类中的一个实际用法是在全局设置对象中 父类是一个单例类,嵌套类作为设置类别 背景 文件设置 打印设置 等等 将内部对象作为单独的类是没有实际意义的,因为它们在设置类范围之外没有任何用处。嵌套/内部类只是一个只在另一个类的上下文中使用的类,而另一个类没有自
因此,我的java书中有一整章都是关于嵌套类的,但最后指出,只有当涉及到“建模组合关系并实现要隐藏的类的内部结构”时,才应该真正使用嵌套类。因此,让我们讨论一下何时需要使用嵌套类和一些示例 我在嵌套类中的一个实际用法是在全局设置对象中 父类是一个单例类,嵌套类作为设置类别
- 背景
- 文件设置
- 打印设置
- 等等
将内部对象作为单独的类是没有实际意义的,因为它们在设置类范围之外没有任何用处。嵌套/内部类只是一个只在另一个类的上下文中使用的类,而另一个类没有自己的类文件。如果链接到实例,则只能在父类实例的上下文中实例化;它可以查看私有数据,如果是静态类,则只能查看私有静态数据 java developer站点有一个嵌套类教程,其中有一个示例: 以下是几个用法示例:
- 隐藏 接口:
- 通过实施 接口:
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中