自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 第三十二条 用EnumSet代替位域

在java中,我们经常会定义一些常量值,来表示一些状态,每个常量值代表的意思都不一样,有的还是可以共存的public class Text {    public static final byte STYLE_BOLD          = 1<<0; // 1    public static final byte STYLE_ITALIC        = 1<&...

2018-09-30 17:08:35 411

原创 第三十一条 用实例域代替序数

枚举中有个方法, ordinal()方法,它的值是枚举常量在类型中的数字位置,如果把枚举里面的内容对象看成是一个数组,那么,这个值就是索引。public enum Ensemble {    SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET;    public int numberOfMus...

2018-09-30 15:34:35 291

原创 第三十条 用enum代替int常量

枚举类型是指一组固定常量组成合法值的类型,例如一年四季、太阳系行星、一副牌的四种花色等可以归纳的东西。在枚举出现之前,一般都是用常量来标识每个不同的类型public static final int APPLE_FUJI = 0;public static final int APPLE_PIPPIN = 1;public static final int APPLE_GRANNY_SM...

2018-09-30 13:49:10 336

原创 第二十九条 优先考虑类型安全的异构容器

泛型最常见的就是用于集合,例如 List Set Map 等,加入泛型一般就是加入了元素类型限制。 异构容器是指能容纳不同类型对象的容器,原生态的List Mpa 等时异构容器,但一旦使用了泛型参数,比如 List<String>  Map<String,String> ,他们就不是异构容器了,因为里面限制了只能加入 String 类型。我们知道,原生态类型的集合是不安全...

2018-09-28 17:43:53 199

原创 第二十八条 利用有限制通配符来提升API的灵活性

书中提到,参数化类型是不可变的,意思就是两个截然不同的类型 Type1 和 Type2, List<Type1> 即不是 List<Type2> 的子类型,也不是它的超类型。即使 Type1 是 Type2 的子类,List<Type1>也不是 List<Type2> 的子类。最直观的的例子, String 是 Object 的子类,但   List...

2018-09-27 20:29:47 226

原创 第二十七条 优先考虑泛型方法

如同类一样,方法也可以加入泛型,尤其是静态工具类方法。Collections 骨架类中,全用到了泛型方法。书中例子    public static Set union(Set s1, Set s2) {        Set result = new HashSet(s1);        result.addAll(s2);        return result;    }这...

2018-09-26 16:37:12 255

原创 第二十六条 优先考虑泛型

书中给了个例子    class Stack {        private Object[] elements;        private int size = 0;        private static final int DEFAULT_INITAL_CAPACITY = 16;        public Stack() {            element...

2018-09-25 16:44:38 164

原创 第二十五条 列表优先于数组

数组与泛型相比,两个不同点。1、数组是协变的,意思是如果A是B的子类型,那么数组A[]就是数组B[]的子类型;泛型则是不可变的,对于任意两个不同的类型C和D,List<C> 即不是 List<D> 的子类型,也不是基类型,不管C是不是D的子类。如果你认为泛型是有缺陷的,错了,有缺陷的是数组。Object[] objArray = new Long[10];objA...

2018-09-23 22:46:30 222

原创 第二十四条 消除非受检警告

用泛型编程,会遇到许多编译器警告,例如 非受检强制转化警告、非受检方法调用警告、非受检普通数组创建警告 以及 非受检转换警告。大多数非受检警告很容易消除,少部分警告比较难以消除。但是,对我们而言,我们要尽可能地消除每一个非受检警告。因为消除了所有警告,就可以保证代码是类型安全的;如果无法消除警告,同时可以这部分代码是类型安全的,可以用一个@SupperessWarnings("unchecke...

2018-09-21 17:22:07 237

原创 第二十三条 不要在新代码中使用原生态类型

泛型,出现在java 1.5 版本。之前,往一个集合里面添加数据,取出时,对象都要进行强转操作,如果不小心添加进去其他的错误类型的对象,那么在强转时会出错,程序运行起来了发现错误了。泛型的作用是,明确告诉编译器这个集合中需要哪种类型的对象,编译器自动对对象进行转化,一旦插入错误的对象,编译器直接报错,根本不用等到运行时才出错,提前知道了错误,就可以马上修改。泛型,一般用于类和方法,声明参数类型的,...

2018-09-20 18:05:06 183

原创 第二十二条 优先考虑静态成员类

java中嵌套类有四种,现在举例说明: 静态成员类  非静态成员类  局部类  匿名类 。class Outer {    int age = 20;    String name = "outer";    static class Inner {        int age = 10;        String name = "inner";    }}静态...

2018-09-19 20:19:40 181

原创 第二十一条 用函数对象表示策略

有些语言支持 函数指针 代理 lambda表达式,允许把一些对象和函数功能传递,这种机制允许调用者通过调用其他函数,来决定自己的行为。比如回调,如果回调的方法非void类型,而是其他的类型,我们就可以直接以这个回调的结果值作为一种判断标准,决定下一步走到哪个分支。常见的场景是 comparator 比较器,该方法是泛型形式,传入两个同类型的值,根据这两个对象的某些值的大小做比较,返回正数 负数 或...

2018-09-19 16:58:55 85

原创 第二十条 类层次优于标签类

在写代码时,通常都是不那么单一的,同一个类会有各种不同的场景需要判断,比如根据传进去的参数去进行不同的计算,书中给了个例子    public class Figure {        enum Shape {            RECTANGLE,            CIRCLE        }        final Shape shape;        d...

2018-09-18 17:11:30 197

原创 第十九条 接口只用于定义类型

接口,一般都是定义一些公共方法,或者作为回调使用;当类实现接口时,这个类就可以认为是这个接口的实例类型,这个类表明就是接口的实现类,可以做一些相对应的操作。接口应该是功能型的,而不适合定义常量。 有一种常量接口,里面包含 静态的 final 的成员变量,并且都是常量,供其他地方引用。    public interface ObjectStreamConstants {         ...

2018-09-17 20:02:44 395

原创 第十八条 接口优于抽象类

类可以很快的被更新,以实现新的接口,扩展功能。例如前期编写了一个类A,然后要加入了一个新接口B,如果想让之前的类实现这个接口,添加一个implement B即可,然后在A中实现具体细节功能,完美兼容之前的版本,并不会改动A里面现有的逻辑。 接口是定义mixin(混合类型)的理想选择,和适合。同时类时实行单继承的,而接口是可以多继承,这个比较有优势,扩展性更强。 接口允许我们构造非层次结构的类型框...

2018-09-13 21:03:03 176

原创 第十七条 要么为继承而设计,并提供文档说明,要么就禁止继承

上一条提到了,继承是个好东西,用好了威力无穷,用坏了,遗患无穷。所有文档要有,必须有,尤其是可以重写的对方法的注解,要说明哪些情况可以重写,哪些情况需要避免重写。按照书中所举的例子,Collection 骨架代码中的 remove()方法Collection    /**     * Removes a single instance of the specified element fr...

2018-09-12 21:03:25 190

原创 第十六条 复合优先于继承

封装、继承、多态是java的三大特征,而封装和继承有点对立。封装是指把一个功能封装到方法里,隐蔽细节,直接暴露给他人调用;继承则是代码重用的有效手段,把共同的代码抽取到一个基类里,子类去继承,这样能减轻工作量和维护量,但如果使用不当,程序也会变得很脆弱。好的写法可以通过继承来建立一套从上到下的骨架类型的类,差劲的就很明显的打破了封装性,子类会及其依赖于父类的功能,一旦修改稍有不慎,很容易出问题。本...

2018-09-11 21:59:05 269

原创 第十五条 使可变性最小化

不可变的类是指这个类被实例化了后,不能被修改。类的成员变量必须是在创建的时候被赋值,并在对象被销毁钱不会改变。java 中的 String 基本类型包装类 BigInterger 等都属于这方面的例子。这样设计的好处是 易于设计 不容易出错,更安全。我们设计这种类型的类时,要遵循五大原则:一、不要提供任何可以改变成员变量值的方法。 也就是说这个类的成员变量,不要对外暴露方法,从而可以改变它的...

2018-09-10 15:26:58 249

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除