Effective java读书笔记(4)

第四章节

23)请不要在新代码中使用原生态类型

如果使用原生态类型,就失去了泛型在安全性和表述性方面的所有优势

ArrayList i = new ArrayList()这样写的目的是为了支持jdk5以前的代码。

24)消除非受检警告

尽可能消除每一非受检警告。

如果无法消除警告,同时可以证明引起警告的代码是类型安全的,可以用一个@SuppressWarnings("unchecked")来消除警告。并且,始终在尽可能小的范围中使用这条注解。

public static <T> T[] getItem(int Max) {
        @SuppressWarnings("unchecked") T[] result = (T[]) new Object[Max];
        return result;
   }

25)列表优先于数组

利用列表我们可以在编译时发现问题

Object[] object = new Long[1];
object[0] = "Insert"

这一段代码是合法的。

List<Object> ol = new ArrayList<Long>();
ol.add("Insert");

这一段代码是不合法的。

利用列表可能会损失性能和简洁性,但是换回的却是更高的类型安全性和互用性。
而我们在处理并发的时候,列表更加安全。

26)优先考虑泛型

使用泛型比使用需要在客户端代码中进行装换的类型来得更加安全。

我们来实现一个不考虑泛型的代码

//com.insanus.Generic.java
package com.insanus;
public class Generic {
    private Object[] elements;
    private final static int MAX = 10000;
    private int size = 0;
    public Generic() {
        elements = new Object[MAX];
    }
    public void push(Object i) {
        elements[size] = i;
        size ++;
    }
    public Object pop() {
        if (size == 0)
            return null;
        Object out = elements[size - 1];
        elements[size] = null;
        return out;
    }
}

而我们在处理的时候要进行类型转换,这很不安全,所以我们改写这份代码,加入泛型。

//com.insanus.Generic.java
package com.insanus;
public class Generic<T> {
    private T[] elements;
    private final static int MAX = 10000;
    private int size = 0;
    @SuppressWarnings("unchecked") public Generic() {
        elements = (T[])new Object[MAX];
    }
    public void push(T i) {
        elements[size] = i;
        size ++;
    }
    public T pop() {
        if (size == 0)
            return null;
        T out = elements[size - 1];
        elements[size] = null;
        return out;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值