zoukankan      html  css  js  c++  java
  • ava面向对象设计最佳实践 内置类设计 2

    如果 OuterClass类 中有实例变量的话,显然 NestedClass 是 不可见的,也是不适用的(因为它是类的一部分)。

    这个时候,利用实例内置类可以解决这类问题。

    示例代码如下:

    package  org.mercy.design;

    /**

      *   OuterClass2   是外层类,InnerClass   实例内置类

      *  

      *   @author   mercyblitz

      */

    public   class  OuterClass2 {

    private  String  message ;

    /**

      *   使用private   final   是一种好习惯。:D

      */

    private   final   class   InnerClass  {

    /**

      *   输出OuterClass2消息

      */

    private   void   outputMessageFromOuterClass2 ()  {

    // 注意,this的命名空间

    System. out .println(OuterClass2. this . message );

    }

    }

    }

    代码 -2

    在“代码-2 ”中, InnerClass 利用 OuterClass2 的 message 字段作为输出。

    可能有人会说,InnerClass 这种实例内,为了得到这个类,不得不创建一个实例,太浪费 资 源 了, 为什么不直接把OuterClass 实例作为参数,直接传入到 InnerClass 的方法呢?

    没错,可以那么做。不过单从访问外层类的实例变量而言,利用实例 内置类是有点显得 浪 费。 如 果 客 户端利用了泛型编程的话,情况就会不同。

    总所周知, 泛 型设计能够提高灵活性,可是也有很多限制。模版参数类型是跟随其寄主类的, 模 板参数类型是不会写入class 文件中的,这就是为什么反射( Reflection )不能解析出类的模板参数类型。但是,模板参数类型在实例(对象)范围是可用的(或可视的) 。 如果内置类中想要利用外层类的模板参数类型的话,那么实例内置类就有很大用处。

    例子如下:

    package  org.mercy.design;

    /**

      *   OuterClass3   是外层类,InnerClass   实例内置类

      *  

      *   @author   mercyblitz

      *   @param   <T>

      *              模板参数类型,实例内置类可以利用

      */

    public   class  OuterClass3<T> {

    private  T  data ;

    /**

      *   使用private   final   是一种好习惯。:D

      */

    private   final   class   InnerClass  {

    public   void  setData(T newData) {

    OuterClass3. this . data  = newData;

    // DOES Other things

    }

    }

    }

    代码 -3

          

  • 相关阅读:
    OpenJTAG与Jlink/Jlink的区别
    Ubunut 10.04 upgrade git
    HEVC播放器出炉,迅雷看看支持H.265
    平铺文理+拉伸按钮图片
    黑马程序员java基础学习IO流4
    Excel 2010实战技巧精粹
    昆明虚假楼盘吸引 2 千多人购买诈骗近 3 亿
    Canonical 公司预计最晚明年 4 月推出 Ubuntu 中国版
    Canonical 公司预计最晚明年 4 月推出 Ubuntu 中国版
    十二个理由让你不得不期待 Ubuntu10.10
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400271.html
Copyright © 2011-2022 走看看