读书笔记-《Effective Java》第23、24、25、26、27条:请优先考虑泛型

本文详细阐述了Java泛型的使用技巧,包括避免使用原生类型、消除非受检警告、优先选择列表而非数组、利用泛型提升代码安全性与效率。通过实例对比,展示了泛型在类型检查、代码复用及减少运行时错误方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第23条:请不要在新代码中使用原生类型

用泛型可以在编译期间发现错误。错误越早发现越好。

第24条:消除非受检警告

还是推荐用法泛型在编译期就确定好集合、列表中的类型。

    @Test
    public void Test(){
        Set s2 = new HashSet(); //被认为不安全

        Set<Son2> s3 = Sets.newHashSet(); //安全
        Set<Son2> s4 = new HashSet<Son2>(); //安全
    }



    public static <E> HashSet<E> newHashSet() {
        return new HashSet();
    }

第25条:列表优于数组

如果使用数组, 有可能会写不安全的代码,例如:

Object[] o = new Integer[2];
o[0] = "abc";

用泛型列表就很安全,不用担心存错类型。

数组与列表的区别:

  1. 数组是协变的,如果Sub为Super的子类型,那么Sub[]就是Super[]的子类型,而在泛型中,ArrayList<Sub>与ArrayList<Super>没有父子关系。
  2. 数组是具体化的, 只有在运行的时候才会去检查元素的类型约束,而泛型是在编译时强化它们的类型信息,并在运行时丢弃(擦除)成Object。

第26:优先考虑泛型

类上的泛型, 成员变量就可以用这个传进来的类型。

public class Son2<E> {

    public List<E> list = Lists.newArrayList();
    
}

第27:优先考虑泛型方法

使用泛型方法

   public static <E> ArrayList<E> newArrayList() {
        return new ArrayList();
    }

public class Son2<T> {

    List list;

    public <E> List<E> listadd(E t) {
        if (list == null)
            list = Lists.newArrayList();

        list.add(t);
        return list;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值