-
[综合] Effective Java 接口只用于定义类型
当类实现接口时,接口就充可以引用这个类的实例的类型。因此,类实现了接口,就表明客户端可以对这个类的实例实施某些动作。为了任何其他目的而定义接口是不恰当的。 有一种接口被称为常量接口(constantinterface),它不满足上面的条件。这种接口没有包含任何方法,它只包含静态的final域,每个域...
25
热度 -
[综合] Effective Java 类层次优于标签类
有时候,可能会遇到带有两种甚至更多风格的实例代码的类,并包含表示实例风格的标签(tag)域。例如,考虑下面这个类,它能够表示圆形或者矩形: //Taggedclass-vastlyinferiortoaclasshierarchy! classFigure{enumShape{RECTANGLE,C...
16
热度 -
[综合] Effective Java 用函数对象表示策略
有些语言支持函数指针(functionpointer)、代理(delegate)、lambda表达式(lambdaexpression),或者支持类似的机制,允许程序把“调用特殊函数能力”存储起来并传递这种能力。这种机制通常用于允许函数的调用者通过传入第二个函数,来指定自己的行为。例如,C语言标准库...
43
热度 -
[综合] Effective Java 请不要在新代码中使用原生态类型
声明中具有一个或者多个类型参数(typeparameter)的类或者接口,就是泛型。 泛型类和泛型接口统称为泛型(generictype)。 每种泛型定义一组参数化的类型,构成格式为:先是类或者接口的名称,接着用尖括号(<>)把对应于泛型形式类型参数的实际类型参数列表括起来。 原生态类型...
76
热度 -
[综合] Effective java 列表优先于数组
看到这个标题的时候,我有个疑惑:是不是优先使用列表,能用列表就尽量用列表吗?我觉得,之所以说列表优于数组,应该是在某些语法设计方面,列表有比较大的优势。但是要具体问题具体分析,数组也有自身的优势(对于固定长度的序列,性能更加高),而且在某些情况下,列表的所谓的优势并不能发挥。 数组是协变且可以具体化...
23
热度 -
[综合] Effective Java 优先考虑泛型方法
就如类可以从泛型中受益一般,方法也可以。静态工具方法尤其适合与泛型化。JDK中的Collections泛型中的 所有“算法”方法都泛型化了。 如:下面这个方法返回连个集合的联合。 publicstaticSetunion(Sets1,Sets2) { Setresult=newHashSet(s1...
68
热度 -
[综合] Effective Java 优先考虑泛型
一般来说参数化声明并使用JDK提供的泛型和方法通常并不困难。编写自己的泛型会比较困难一些,但是值得花些时间去学习如何编写。 ??考虑到第7项中这个简单(玩具)堆栈的实现: //Object-basedcollection-aprimecandidateforgenerics publicclassS...
89
热度 -
[综合] Effective Java 利用有限制通配符来提升API的灵活性
如第28条所述,参数化类型是不可变的(invariant)。对两个不同类型T1和T2而言,List<T1>与List<T2>没有父子类型关系。 1、Extends 有时候,需要的灵活性要比不可变类型所能提供的更多。考虑第26条中的堆栈下面就是他的公共API: publiccl...
77
热度 -
[综合] Effective java 优先考虑类型安全的异构容器
泛型最常用于集合,如Set和Map<K,V>,以及单元素容器,例如ThreadLocal和AtomicReference。在这些用法中,它都充当被参数化了的容器。这样就限制你没个容器只能有固定数目的类型参数。一般来说,这种情况正是你想要的。一个Set只有一个类型参数,表示它的元素类型;一...
47
热度 -
[综合] Effective Java(用实例域代替序数、用EnumSet代替位域)
1.用实例域代替序数 枚举类型有一个ordinal方法,它的范围是常量的序数从0开始,不建议使用这个方法,因为这不能很好地对枚举进行维护,正确应该是利用实例域,例如: publicenumErrorCode{FAILURE(0),SUCCESS(1);privatefinalintcode;//上一...
86
热度 -
[综合] Effective Java 坚持使用Override注解
1.简介Override注解只能用在方法声明中,表示被注解的方法声明覆盖了超类型中的一个声明。 2.使用Override注解的好处当你想要覆盖父类的方法时,却因为人为原因将覆盖写成了重载,如果在方法上标注了Override注解,那么编译器就会在编译期间帮助你发现这个错误,而非在程序运行时出现非法的错...
40
热度 -
[综合] Effective Java 用标记接口定义接口类型
标记接口(markerinterface)是没有包含方法声明的接口,而只是指明(或者“标明”)一个类实现了具有某种属性的接口。例如,考虑Serilizable接口(第12章)。通过实现这个接口,表明类的实例可以被写到ObjectOutputStream(或者“被序列化”)。 ??你可能听说过标记注解...
83
热度 -
[综合] Effective Java 检查参数的有效性
绝大多数方法和构造器对于传递给他们的参数值都会有某些限制。例如索引值必须是非负数,对象引用不能为null,等等。 应该在文档中清楚地指明所有这些限制,并且在方法体的开头出检查参数,以强制施加这些限制。这是“应该在发生错误之后尽快检测出错误” 这一普遍原则的一个具体情形。 如果传递无效的参数值给方法,...
74
热度 -
[综合] Effective Java 谨慎设计方法签名
1.谨慎地选择方法的名称。遵循标准的命名习惯。 2.不过于追求提供便利的方法。方法太多会使类难以学习、使用、文档化、测试和维护。 3.避免过长的参数列表。目标是四个参数以下。 缩短参数列表的方法: (1)把方法分解成多个方法,可能会导致方法过多,通过提升方法正交性,可以减少方法数目。java.uti...
8
热度 -
[综合] Effective Java 慎用可变参数
Java1.5增加可变参数方法,可变参数方法接受0个或者多个指定类型的参数。 可变参数的机制通过先创建一个数组,数组的大小为在调用位置所传递的参数数量,然后将参数值传到数组中,最后将数组传递给方法。 staticintsum(int...args){intsum=0;for(intarg:args...
8
热度 -
[综合] Effective Java 返回零长度的数组或者集合,而不是null
privatefinalList<Cheese>cheesesInStock=...;publicCheese[]getCheese(){if(cheesesInStock.size()==0)returnnull;... } 如果返回null, 在客户端处理代码就需要有额外的代码来处理...
57
热度 -
[综合] HTML常用标签或属性全称
HTML标签或属性 英文全称 中文释义 a Anchor 锚 abbr Abbreviation 缩写词 acronym Acronym 取首字母的缩写词 address Address 地址 dfn DefinesaDefinitionTerm 定义定义条目 kbd Key...
24
热度 -
[综合] artTemplate的简单用法
在实际开发中,我们会使用模板引擎来提高开发效率。而众多的模板引擎中,artTemplate无论就速度,兼容性还是使用人数上,都占绝对优势。这里我将简单地介绍下artTemplate的常见用法。 对于这其中涉及到的语法,我们只需要记住并且会用即可,不需要知道为什么这样用 用法一:使用渲染模板 需要先使...
53
热度 -
[综合] JavaScript replace用法全解
replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。当replace应用在正则表达式上,它的价值是非常之高的! stringObject.replace(regexp/substr,replacement) 参数 描述 regexp/subst...
31
热度 -
[综合] 超全的css新手学习笔记
1.CSS三大特性 继承性、层叠性、优先级 继承性:子元素可以继承父元素的样式。 什么样的属性才可以继承: color,以text-,font-,line-开头的属性都是可以继承的 这些关于文字样式的,都能继承;而所有关于盒子、定位、布局的属性都不能继承。 具体应用:在写页面之前我们会通过给body...
64
热度