关闭

方法

150人阅读 评论(0) 收藏 举报
分类:

第三十八条:检查参数的有效性

  1. 在这个方法执行之前先对参数进行检查。

第三十九条:必要时进行保护性拷贝

  1. 对于构造器的每一个可变参数(指引用类型参数)进行保护性拷贝是必要的,防止其他对方改变值,从而避过这些参数需要满足的条件。
    public Period(Date start,Date end){
        this.start=new Date(start.getTime())
        this.end =new Date(end.getTime());

        if(this.start.compareTo(this.end)>0){
            throw new Exception("...");
        }
    }
  1. 保护性拷贝是在检查参数有效性之前进行的,并且有效性检查是针对拷贝之后的对象,而不是针对原始的对象。
  2. 对于参数类型可以被不信任方子类化的参数,请不要使用clone方法进行保护性拷贝,需要new一个新对象出来。
  3. 由于一个类的实例他的访问方法提供了对其可变内部成员的访问能力,意味可以改变内部成员的值,所以需要针对两个访问方法,如果信任调用者不会改变这些参数的值,也可以不进行保护性拷贝。
    public Date start(){
        return new Date(start.getTime());
    }

    //下同

第四十条:谨慎设计方法签名

  1. 谨慎地选择方法的名称.名称应遵循标准的命名习惯(见第56条)。首要目标是易于理解,并且与系统保持一致。如有疑问,请参考Java类库。
  2. 不要过于追求提供便利的方法。对于类和接口所支持的每个动作,都提供一个功能齐全的方法。
  3. 避免过长的参数列表。两种方法可以缩短过长的参数列表:

    (1). 把方法分解成多个方法。

    (2). 创建辅助类,用来保存参数的分组。一般为静态成员类,如果一个频繁出现的参数序列可以被看作是代表了某个独特的实体,建议使用该方法。
  4. 对于参数类型,要优先使用接口而不是类。
  5. 对于Boolean参数,要优先使用两个元素的枚举类型。
   Boolean.TRUE;Boolean.FALSE;   

第四十一条:慎用重载

  1. 永远不要导出两个具有相同参数数目的方法。

第四十二条:慎用可变参数

  1. 声明该方法带有两个参数,一个是指定类型的正常参数,另一个是这种类型的varargs参数
    public void min(int firstArg,int... othersArgs){
        ...
    }

第四十三条:返回零长度的数组或者集合,而不是null

  1. 返回类型为数组或者集合的方法没有理由返回null,而不是返回一个零长度的数组或者集合。可以使用Collection,emptySet、emptyList和emptyMap方法。

第四十四条:为所有导出的API元素编写文档注释

0
0
查看评论

[每日问答]生成方法和判别方法有什么区别?

生成方法和判别方法有什么区别?
  • cloud_xiaobai
  • cloud_xiaobai
  • 2017-05-16 10:14
  • 223

java8 - 方法引用(method referrance)

方法引用的概念        某些lambda表达式里面仅仅是执行一个方法调用。在这种情况下,不用lambda表达式,直接通过方法名称引用方法的形式可读性更高一些,这种形式就是方法引用,方法引用是一种更简洁易懂的lambda&#...
  • wwwsssaaaddd
  • wwwsssaaaddd
  • 2014-07-08 21:04
  • 10317

lua 元方法

事件名与元方法 仅表(table)类型值对应的元表可由用户自行定义。其他类型的值所对应的元表仅能通过 Debug 库进行修改。 元表中的事件名均以两条下划线 __ 作为前缀,元表支持的事件名有如下几个: __index -- 'table[key]&...
  • yangzhenzhen
  • yangzhenzhen
  • 2016-04-24 14:39
  • 1669

方法与函数

我们之前在C中学习的函数,就叫做函数. void test() { } 在OC类中写的方法.就叫做方法. - (void)sayHi; 相同点:都是用来封装1段代码的. 将1段代码封装在其中, 表示1个相对独立的功能 函数或者方法只要被调用.那么封装在其中的代码就会被自动...
  • yi_zz32
  • yi_zz32
  • 2015-09-20 21:43
  • 1408

Python的方法定义

<br />常用的方法定义<br />方法在OOP中会经常用到,减少代码的冗余,作为一门面向对象的语言,Python自然也有自己的方法定义。那么怎样在Python中定义一个方法呢,很简洁的方法:define functionname()<br />调用的时候直接使...
  • cnpython
  • cnpython
  • 2011-02-18 09:49
  • 15615

Runtime的实践——方法交换

读过《Runtime的初步认识——结构体与类》的小伙伴们应该对objc_class结构体的构造有所了解了struct objc_class { Class isa OBJC_ISA_AVAILABILITY; #if !__OBJC2__ Class super_class ...
  • RuiWang321
  • RuiWang321
  • 2016-05-12 13:05
  • 2719

Eclipse提取方法

方法一:使用菜单命令 方法二:Ctrl+1 方法三:快捷键Alt+Shift+M
  • songyi160
  • songyi160
  • 2016-11-15 09:54
  • 1327

HTTP Servlet 重要的几个方法

HTTP Servlet继承了GencenServlet类    GencenServlet实现了两个接口··一个用于ServletConfig设置接口,一个为Servlet接口只要是(1) init() 方法 控制Servlet的生命周期·...
  • besttaling
  • besttaling
  • 2009-10-27 16:10
  • 12338

Canvas的各种方法大集合

一、Canvas简介 Canvas类 二、用Canvas画直线,画圆,画弧线,画文字 1.画直线——drawLine(); public void drawLine (float startX, float startY, float stopX, float stopY, Paint pa...
  • abbydong
  • abbydong
  • 2015-11-14 16:32
  • 1612

多态&动态绑定&方法匹配&方法绑定

1)多态:父类型的变量,可以引用子类型的对象 class A{ } class B extends A{ }那么可以 A a = new B(); 其中这里的A叫做声明类型,B叫做实际类型 那么这里的a就可以调用B中的方法(如果有的话),那么是不是什么方法都能调用呢?往下看 2)动态绑定 定义...
  • qq_18433441
  • qq_18433441
  • 2017-08-23 10:58
  • 351
    个人资料
    • 访问:22211次
    • 积分:647
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:13篇
    • 译文:0篇
    • 评论:5条
    最新评论