1.公有类永远都不应该暴露可变的域.如果域是不可变的,暴露公有类的危害就要小一些.

但是,有时候需要用包级私有的或者私有的嵌套类来暴露域,无论这个类是否可变

2.如果公有类暴露了它的访问域,要想在将来改变其内部表示法是不可能的,因为公有类的客户端代码已经遍布隔出来

当域被读取的时候,强加约束

public final class TimeManager {
private static final int HOURS_PER_DAY = 24;
private static final int MINUTES_PER_HOURS = 60; public final int hour;
public final int minute; public TimeManager(int hour,int minute){
//当公有类的暴露域被读取的时候,强加约束
if(hour < 0 || hour >= HOURS_PER_DAY)
throw new IllegalArgumentException("hour:" + hour);
if(minute<0||minute>=MINUTES_PER_HOURS)
throw new IllegalArgumentException("min:"+minute);
this.hour = hour;
this.minute = minute;
}
}

EffectiveJava(14)在公有类中使用访问方法而非公有域的更多相关文章

  1. Effective Java 第三版——16.在公共类中使用访问方法而不是公共属性

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  2. 第8.14节 Python类中内置方法__str__详解

    一. object类内置方法__str__和函数str 类的内置方法__str__和内置函数str实际上实现的是同一功能,实际上str调用的就是__str__方法,只是调用方式不同,二者的调用语法如下 ...

  3. C++:调整基类成员在派生类中的访问属性的其他方法(同名成员和访问声明)

    4.3 调整基类成员在派生类中的访问属性的其他方法 4.3.1 同名函数 在定义派生类的时候,C++语言允许在派生类中说明的成员与基类中的成员名字相同,也就是 说,派生类可以重新说明与基类成员同名的成 ...

  4. 3.3 C++改变基类成员在派生类中的访问属性

    参考:http://www.weixueyuan.net/view/6360.html 总结: 使用using声明可以改变基类成员在派生类中的访问属性. private: using book::se ...

  5. C++——派生类中的访问——可见性问题

    C++中派生类对基类成员的访问形式主要有以下两种: 1.内部访问:由派生类中新增成员对基类继承来的成员的访问. 2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在 ...

  6. 在client类中设置访问属性 address,business和individua

    php 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好.其实际的目的, 是为了有的场合想用多继承,但PHP又没多继承 ,于是就发明了这样的一个东西. Traits可以理解为一组能 ...

  7. 第7.14节 Python类中的实例方法详析

    第7.14节 Python类中的实例方法详析 一.    实例方法的定义 在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式: 1.    类体中定义实例方法 第一种方式很简单,就是在类体 ...

  8. 第8.26节 重写Python类中的__getattribute__方法实现实例属性访问捕获

    一. 引言 在<第7.23节 Python使用property函数定义属性简化属性访问的代码实现>和<第7.26节 Python中的@property装饰器定义属性访问方法gette ...

  9. PHP通过反射方法调用执行类中的私有方法

    PHP 5 具有完整的反射 API,添加了对类.接口.函数.方法和扩展进行反向工程的能力. 下面我们演示一下如何通过反射,来调用执行一个类中的私有方法: <?php //MyClass这个类中包 ...

随机推荐

  1. Pandas之Series

    # Series 数据结构 # Series 是带有标签的一维数组,可以保存任何数据类型(整数,字符串,浮点数,Python对象等),轴标签统称为索引 import numpy as np impor ...

  2. Codevs 1710 == POJ 1190 生日蛋糕 == 洛谷P1731

    生日蛋糕 时间限制: 2 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ ...

  3. [bzoj1433][ZJOI2009]假期的宿舍——二分图

    题目大意 传送门 题解 显然是二分图匹配. 用一些方法建图就好了. 要注意的是: 本题有多组数据!!! 初始化一定要注意!!! 代码 #include <bits/stdc++.h> us ...

  4. artTemplate 动态加载模版

    问题 之前项目中一直有用到artDialog对话框组件,作者后期又发布了js模版引擎,使用过几次,效果感觉还挺好.当自己想把模版放在html之外时,遇到了一点问题. 作者介绍的方式,是在js文件中,通 ...

  5. eclipse 导出burpsuite插件包含第三方lib包

    第一步:右键项目点击export: 2.选择Runable JAR file: 点击Finish后会爆出一个错误(Jar export finished with problems. See deta ...

  6. 包嗅探和包回放简介-tcpdump,tcpreplay

    一.  嗅探 1.1  嗅探技术简介 1.1.1  目标 嗅探的目标:获取在网络上传输的各种有价值信息:账号.密码.非公开协议 1.1.2  原理 嗅探的原理:大多数嗅探都是在以太网内,利用数据链路层 ...

  7. likely,unlikely宏与GCC内建函数__builtin_expect()

    在 GCC 手册中对 __builtin_expect() 的描述是这样的: 由于大部分程序员在分支预测方面做得很糟糕,所以 GCC 提供了这个内建函数来帮助程序员处理分支预测,优化程序.其第一个参数 ...

  8. python 操作数据库1--连接、执行sql语句

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/20 16:03 # @Author : lijunjiang # @Fi ...

  9. BestCoder 2nd Anniversary的前两题

    Oracle Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Su ...

  10. poj 1873(枚举所有的状态+凸包)

    The Fortified Forest Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6115   Accepted: 1 ...