最小化类和成员的訪问能力

最小化类和成员的訪问能力

大家好,又见面了,我是全栈君。

原文地址:http://leihuang.org/2014/11/17/minmize-accessibility/

信息隐藏

要想差别一个设计良好的模块与一个设计不好的模块。最重要的因素是,这个模块对于外部的其他模块而言。是否隐藏了内部的数据和其他的实现细节。换句话说,就是模块的设计者是否对其进行了良好的封装。

对于顶层的(非嵌套的)类和接口,它们仅仅有2种訪问级别:包级私有(package-private)和公有(public)。

假设选择了包级私有,那么它仅仅是这个包的实现的一部分,而不是该包对外提供服务的API的一部分。

在以后的版本号中。你能够对它进行改动、替换甚至删除。而无需操心会伤害到现有的使用者。

而假设选择的公有的,你就有义务永远支持它。以保持兼容性。

对于成员(域和方法)。訪问级别共为4种:

● 私有的(private)——仅仅有该成员的顶层类中才干訪问

● 保护的(protected)——本包内的不论什么类和所在类的子类都能够訪问

● 公有的(public)——不论什么地方都能够訪问

实例域不能为public

假设一个实例域时final。或者是一个指向可变对象的final引用。假设你将这种类申明为public。那么你就不能限制存在这个域里面的值。也不能强制这些数据不变。

同一时候,实例域被改动时你也不能做些什么。所以:

classes with public mutable fields are not thread-safe.

具有公有的静态final数组域差点儿总是错误的。注意这句话共同拥有4个定语——公有的、静态的、final的、数组。

// 这能够肯定是错误的public static final Type[] VALUES = { ... };  // 应该改成这样private static final Type[] PRIVATE_VALUES = { ... };  public static final List VALUE = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));// 或者这样写(可能损失一点性能),前提是Type实现了克隆接口,并且你不反感克隆private static final Type[] PRIVATE_VALUES = { ... };  public static final Type[] values() {      return (Type[]) PRIVATE_VALUES.clone();}


2014-11-17 00:48:43

Brave,Happy,Thanksgiving !

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116635.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Unity3d场景快速烘焙【2020】

    Unity3d场景快速烘焙【2020】很多刚刚接触Unity3d的童鞋花了大量的时间自学,可总是把握不好Unity3d的烘焙,刚从一个坑里爬出来,又陷入另一个新的坑,每次烘焙一个场景少则几个小时,多则几十个小时,机器总是处于假死机状态,半天看不到结果,好不容易烘焙完了,黑斑、撕裂、硬边、漏光或漏阴影等缺陷遍布,惨不忍睹,整体效果暗无层次,或者苍白无力,灯光该亮的亮不起来,该暗的暗不下去,更谈不上有什么意境,痛苦的折磨,近乎失去了信心,一个团队从建模到程序,都没什么问题,可一到烘焙这一关,就堵得心塞,怎么也搞不出好的视觉效果,作品没法及时向用户交

    2022年6月11日
    27
  • BufferedWriter输出流的使用「建议收藏」

    BufferedWriter输出流的使用「建议收藏」packagecom.lzxa.analyze.common;importjava.io.*;importjava.text.DateFormat;importjava.text.SimpleDateFormat;importjava.util.Date;/***输入流*/publicclassIOBufferedWriter{static…

    2022年6月1日
    28
  • springboot+dynamicDataSource动态添加切换数据源

    springboot+dynamicDataSource动态添加切换数据源

    2020年11月9日
    306
  • Python3对股票数据进行分析

    Python3对股票数据进行分析目录一、量化交易概述1、量化交易(投资方法)2、算法交易(自动交易、黑盒交易或机器交易)3、量化策略4、量化选股5、股票回测二、股票数据三、股票数据分析1、导入股票时间序列数据2、绘制股票成交量的时间序列图3、绘制股票收盘价和成交量的时间序列图3、绘制K线图(蜡烛图)(1)K线图理论(2)K线图绘制4、股票指标相关性分析(1)相关关系…

    2022年6月11日
    58
  • 较好的Mac激活成功教程软件下载地址「建议收藏」

    较好的Mac激活成功教程软件下载地址「建议收藏」史蒂芬周的博客

    2022年10月10日
    0
  • qt 5.12.1 下载安装详细教程

    qt 5.12.1 下载安装详细教程前言:Qt是一个跨平台的C++图形界面应用程序框架。它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt同XWindow上的Motif,Openwin,GTK等图形界面库以及Windows平台上的MFC、OWL、VCL、ATL是同类型的东西。一:下载地址http://download.qt.io/of…

    2022年5月13日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号