zoukankan      html  css  js  c++  java
  • EffectiveJava(13)使类和成员的可访问性最小化

    1.为什么要使类和成员可访问性最小化
    它可以有效地解除组成系统的各模块之间的耦合关系,使得这些模块可以独立的开发 测试 优化 使用 理解和修改.提高软件的可重用性
    2.成员的访问级别
    私有(private):只有在声明该成员的顶层类内部才可以访问这个成员
    包级私有(package-private):声明该成员的包内部的任何类都可以访问这个成员(缺省访问级别)
    受保护的(protected):声明该成员的类的子类可以访问该成员
    公有的(public)在任何地方都可以访问该成员
    3.类具有公有的静态final数组域,或者返回这种域的访问方法,这几乎总是错误的
    如果类具有这种方法,客户端将能够修改数组中的内容
    例如

        public static final Thing[] VALUES ={...};
    修正:
    a.使公有数组变成私有的,并增加一个公有的不可变列表
    
    private static final Thing[] VALUES={...};
        public static final List<Thing> VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));
    b.使数组变成私有的,并返回一个私有数组的备份
    
    private static final Thing[] PRIVATE_VALUES={...};
        public static final Thing[] values(){
            return PRIVATE_VALUES.clone();
        }

    盲点:
    信息隐藏(封装):模块之间只通过他们的API进行通信,一个模块不需要知道其他模块的内部工作情况
    尽可能地使每个类或者成员不被外界访问(如果包为包级公有,那么你就有责任永远支持他,以保持他们的兼容性)
    受保护的成员应该尽量少用
    不能为了测试,将类 接口或者成员编程包的导出的API的一部分
    实例域绝不能是公有的
    final域要么包含基本类型的值,要么包含指向不可变对象的引用.如果final域包含可变对象的引用,它便具有非final域的所有缺点
    长度非零的数组总是可变的

  • 相关阅读:
    Flappy Bird c++试验版
    log4net在windows 2003 iis6下使用的注意事项
    IIS6下, web.config配置为targetFramework="4.0"时出404错误
    mercurial(hg)使用
    Firebird数据库相关备忘录
    关于项目开发进度的看法
    日常数据分析的主要内容仍是结构化计算
    集算器协助java处理多样性数据源之HDFS
    集算器协助Java处理多样性数据源之Hive
    集算器协助java处理多样性数据源之JSON
  • 原文地址:https://www.cnblogs.com/qwop/p/6637300.html
Copyright © 2011-2022 走看看