• 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域的所有缺点
    长度非零的数组总是可变的

  • 相关阅读:
    POJ 2230 Watchcow 欧拉回路的DFS解法(模板题)
    POJ 2188 Cow Laundry
    ACM一年记,总结报告(希望自己可以走得很远)
    [USACO1.5]回文质数 Prime Palindromes
    POJ-1276-Cash Machine(多重背包)
    POJ-1322 Chocolate(概率DP)
    POJ-1179 Polygon (动态规划)
    HDU-1520 Anniversary party(树形DP)
    HDU-1054 Strategic Game(树形DP)
    POJ-1157 LITTLE SHOP OF FLOWERS(动态规划)
  • 原文地址:https://www.cnblogs.com/qwop/p/6637300.html
Copyright © 2020-2023  润新知