EffectiveJava-Methods
来源:互联网 发布:手机画中画视频软件 编辑:程序博客网 时间:2024/05/20 05:55
最近在阅读《Java Concurrentcy in Practice》,这本书的作者全是java领域的专家,包括《Effective Java》的作者Joshua Bloch。关于Effective Java,作为java编码规范,里面常见的编码技巧应该是熟稔于心的。方法编写,摘录一二。
1 方法参数校验
这一点,是我刚入职时就已经形成的编码意识,防患于未然,在进行业务逻辑之前,先保证输入的有效性,这一原则在jdk的源码中随处可见。
2 必要时使用引用变量的副本
由于java的堆内存是共享的,所以向某个方法传递引用变量时,会面临着对象状态被其他线程修改的风险,同时方法本身也可能对其进行操作。因此,当我们编码的时候必须采取防御性的措施,以应对其他模块对我们使用的变量所做的修改。有时候final变量仅仅标识某个对象不能被重新执行其他对象,但是该对象的状态还是有可能被其他线程修改的,下面的代码,类的不变性还是会被破坏。
/** * @title :Period * @description :成员变量的值还是可能被调用者修改的 * @author :wang_ll */public final class Period {private final Date start;private final Date end;public Period(Date start,Date end){if(start.compareTo(end)>0){throw new IllegalArgumentException(start +"after " +end);}this.start = start;this.end = end;}public Date getStart() {return start;}public Date getEnd() {return end;}public static void main(String[] args) {Date start = new Date();Date end = new Date();//调用PeriodPeriod p = new Period(start,end);//修改对象信息start.setTime(System.currentTimeMillis());}}
正确的处理方式是,编写防御代码,使用参数的拷贝。修正构造函数如下:
public Period(Date start,Date end){if(start.compareTo(end)>0){ throw new IllegalArgumentException(start +"after " +end);}this.start = new Date(start.getTime())this.end = new Date(end.getTime());}
3 返回空数组或者集合对象,而非null对象
返回长度为0的数组或集合对象,客户端调用者没有必要单独处理null的情况,如果调用者马虎大意而不进行判空操作,代码也能正确执行。Collections类提供了空集合常量对象,如Collections.EMPTY_SET,Collections.EMPTY_LIST。对需要返回空集合值的方法统一使用集合的空常量,正确的返回一个集合的方法如下:
public List<Chese> getCheseList(){if(cheseInStock.isEmpty()){return Collections.EMPTY_LIST;}else{return new ArrayList<Chese>(cheseInStock);}}
当集合为空时,返回对象是常量Collections.EMPTY_LIST,非空时,则返回集合的拷贝。
- EffectiveJava-Methods
- EffectiveJava
- EffectiveJava
- METHODS
- Methods
- Methods
- EffectiveJava-第一章
- EffectiveJava-方法
- 开题:EffectiveJava
- EffectiveJava 概述
- EffectiveJava-大纲
- EffectiveJava读书笔记
- EffectiveJava-类和接口
- EffectiveJava-通用程序设计
- EffectiveJava学习笔记
- EffectiveJava第43条
- EffectiveJava第五章:泛型
- EffectiveJava第七章:方法
- fiddler添加过滤条件
- Django的前端页面显示
- Android Launcher分析和修改11——自定义分页指示器(paged_view_indicator)
- 券商的xx系统节点的VIP异常案例介绍及深入分析
- 今天公司新环境重启网卡时候的报错
- EffectiveJava-Methods
- Android Launcher分析和修改12——Widget列表信息收集
- 第16周项目2 用指针玩字符串2
- python爬虫(一)抓取 色影无忌图片
- 天声人語 20141215
- 时间间隔
- jsp中JavaBean的使用
- 首届永利茶具文化节16日在福州拉开帷幕茶具
- java非静态内部类为何不能有静态的成员?