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

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

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

原文地址: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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • redis安装菜鸟教程_redis集群客户端

    redis安装菜鸟教程_redis集群客户端随笔-848文章-0评论-80阅读-278万转载:windows下安装redis及其客户端-Oops!#-博客园windows下安装redis及其客户端首先下载redis安装包:https://github.com/MSOpenTech/redis/releases解压安装包到相应文件夹,任何盘符都行。文件介绍:redis-server.exe:服务端程序,提供redis服务redis-cli.exe:客户端程序,通过它连接redis服务并…

    2022年9月18日
    1
  • .htaccess文件RewriteRule语法规则

    .htaccess文件RewriteRule语法规则.htaccess文件是运行ApacheWebServer的Web服务器的配置文件,对配置和重定向ApacheWebServer文件系统很有用。请记住.htaccess文件将采用隐藏格式。没有人可以通过URL直接看到它。.htaccess文件有很多用途。在这里,我将讨论.htaccess文件RewriteRule语法规则。RewriteRule语法规则#——位于行首时表示注释。[F]——Forbidden(禁止):命令服务器返回403Forb…

    2022年5月15日
    25
  • Redis入门指南(第2版) – 电子书下载 -(百度网盘 高清版PDF格式)

    Redis入门指南(第2版) – 电子书下载 -(百度网盘 高清版PDF格式)Redis入门指南(第2版)-李子骅在线阅读百度网盘下载(z793)书名:Redis入门指南(第2版)作者:李子骅格式:EPUB,HTMLZ,PDF路径:点击打开排序作者:李子骅排序书名:Redis入门指南(第2版)日期:0812月2018uuid:ed21285a-4c67-40ce-b811-4d407b40b4a9id…

    2022年4月20日
    69
  • 公务员考试图形推理题库及答案_公务员考试连通图形

    公务员考试图形推理题库及答案_公务员考试连通图形除了上一篇文章中提到的平移「笔记」公务员考试图形推理部分解题方法(一):四处乱跑小黑块,还有一类图形推理的题目也是经常考察的内容——旋转与翻转。旋转题目相对好做,一般的旋转角度都是肉眼可以辨别的,不需要精确测量,比如下面这道题目,如果题目里面有多个旋转的部分,一定要分开来看。根据内环判定答案在CD中,根据最外环判定答案选C这个题目都是一个方格里面有4条线,所以元素组成相同,还是优先看它们的位置,…

    2022年9月9日
    0
  • 各种窗口最小化快捷键详解「建议收藏」

    各种窗口最小化快捷键详解「建议收藏」一、ALT+Esc可以使当前窗口最小化。二、Win+D最小化所有窗口,再按一下就可以还原窗口。三、Windows+M最小化所有窗口。四、Windows+Shift+M还原最小化的窗口。五、A

    2022年8月4日
    2
  • Java中的cas(this关键字java)

    在JDK5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制

    2022年4月14日
    100

发表回复

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

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