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

          

  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400271.html
Copyright © 2011-2022 走看看