Effective java -- 4 泛型

第二十三条:请不要在代码中使用原生态类型
就是像Set这种待泛型的,就把泛型明确写出来。

第二十四条:消除非受检警告
就是Set<String> sets = new HashSet();这种,第二个泛型不加会有一个警告。

第二十五条:列表优先于数组
数组和泛型的区别:

  • 数组是协变的。就是如果Sub是Super的子类型,那么Sub[]就是Super[]的子类型。泛型则是不可变的。
  • 数组是可具体化的。一次数组会在运行时才知道并检查他们的元素类型约束。

第二十六条:优先考虑泛型
类上加上泛型。

第二十七条:优先考虑泛型方法
和上面差不多,写方法的时候最好能把泛型加上,方便其他人理解,也对类型做了限制跟安全。


interface UnaryFunction<T> {
  T apply(T arg);
}
public class TwentySeventh {
  private static UnaryFunction<Object> unary = new UnaryFunction<Object>() {
    @Override
    public Object apply(Object arg) {
      return arg;
    }
  };

  @SuppressWarnings("unchecked")
  public static <T> UnaryFunction<T> identityFunction() {
    return (UnaryFunction<T>) unary;
  }

  public static void main(String[] args) {
    String[] strings = {"f", "z", "k"};
    UnaryFunction<String> sameString = identityFunction();
    for (String string : strings)
      System.out.println(sameString.apply(string));

    Number[] numbers = {1, 2.0, 3L};
    UnaryFunction<Number> sameNumber = identityFunction();
    for (Number number : numbers)
      System.out.println(sameNumber.apply(number));
  }
}

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

public class TwentyEighth {
  public static <E> Set<E> union(Set<? extends E> s1, Set<? extends E> s2) {
    Set<E> set = new HashSet<E>(s1);
    set.addAll(s2);
    return set;
  }

  public static void main(String[] args) {
    Set<Integer> integers1 = new HashSet<Integer>(Arrays.asList(1, 2, 3));
    Set<Integer> integers2 = new HashSet<Integer>(Arrays.asList(1, 2, 3));
    Set<Double> doubles = new HashSet<Double>(Arrays.asList(1.0, 2.0, 3.0));
    union(integers1, integers2);
    System.out.println(union(integers1, doubles));
  }
}

第二十九条:优先考虑类型安全的易购容器

时间: 2024-10-22 10:18:23

Effective java -- 4 泛型的相关文章

Effective Java之泛型

泛型是Java在JDK1.5版本中引入的一个特性,泛型的出现大大增强了Java代码运行时的安全性,泛型主要应用于容器类中,因为这些类会包含各种各样的其他类,所以需要用泛型来对容器中所包含的类进行约束,比如为List传入一个String的类型参数,那么,这个List对象就只能包含有String类型的类,而不能向1.5之前的原始版本一样,可以包含各种不同的类,泛型的引入大大增强了集合类的约束,减少在使用集合类时报类型转换错误的概率. 书里面建议,在使用数组时尽量采用泛型容器,而不是基本的数组类型,里

Effective Java - 关于泛型

自Java 1.5开始使用的泛型,泛型给人比较直观的印象是..."尖括号里写了类型我就不用检查类型也不用强转了". 确实,那先从API的使用者的角度上想问题,泛型还有什么意义? Discover errors as soon as possible after they are made, ideally at compile time. 泛型提供的正是这种能力. 比如有一个只允许加入String的集合,在没有声明类型参数的情况下,这种限制通常通过注视来保证. 接着在集合中add一个I

Effective Java 第三版——29. 优先考虑泛型

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 29. 优先考虑泛型 参数化声明并使用JDK提供的泛型类型和方法通常不会太困难. 但编写自己的泛型类型有点困难,但值得努力学习. 考虑条目 7中的简单堆栈实现: // Ob

Effective Java 第三版——32.合理地结合泛型和可变参数

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 32. 合理地结合泛型和可变参数 在Java 5中,可变参数方法(条目 53)和泛型都被添加到平台中,所以你可能希望它们能够正常交互; 可悲的是,他们并没有. 可变参数的目

Effective Java中的泛型部分

今天将Effective Java(第二版)中的泛型部分读完,深感自己泛型掌握有多么不熟练,还是需要多加练习. 废话少说,上点重点: 1.不要使用原型 比如: List list = new ArrayList(); 当你用该list引用指向其他带有泛型的List时,是不会出现编译错误的,只会给一个rawtype的警告,但是---- 这很容易出现挂羊头卖狗肉的情况,比如你指向了一个List<Integer>,却add了一个String,这不会出现任何编译错误,但 当你取出来转成Integer时

【总结】Effective java经验之谈,类与接口

转载请注明出处:http://blog.csdn.NET/supera_li/article/details/44940563 Effective Java系列 1.Effective java经验之谈,创建和销毁对象 2.Effective java经验之谈,泛型 3.Effective java经验之谈,类与接口 4.Effective java经验之谈,通用方法 5.Effective java经验之谈,枚举,注解,方法,通用设计,异常 6.Effective java经验之谈,并发编程

Effective java 中文版本阅读总结

点击链接查看云笔记原文 花了半天时间,贪婪的啃读了Effective java 这本书(虽然闻名已久,但是很少看书) 翻着翻着就有种废寝忘食的感觉,下班了都留下来专门看书,后来索性带回家看了. 以下是内容总结,主要是对个人感觉有用的,有很大部分没有提及,因为水平有限,还没有来得及消化 1 引言 2 创建和销毁对象 # 静态工厂方法由于构造器 Boolean.valueOf(String); 几乎总是优于构造器Boolean(String);构造器每次调用的时候都会创建一个新的对象 * 对象创建比

[Effective Java]第八章 通用程序设计

第八章      通用程序设计 45.      将局部变量的作用域最小化 将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性. 要使用局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方才声明,不要过早的声明. 局部变量的作用域从它被声明的点开始扩展,一直到外围块的结束外.如果变量是在“使用它的块”之外被声明有,当程序退出该块之后,该变量仍是可见的,如果它在目标使用区之前或之后意外使用,将可能引发意外错误. 几乎每个局部变量的声明都应该包含一个初始化表达式,如

【电子书】Effective Java中文版下载

下载地址: 点击打开链接 (需要资源0分的联系我~) <Effective Java中文版(第2版)>主要内容:在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案.通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰.健壮和高效的代码.第2版反映了Java 5中最重要的变化,并删去了过时的内容. <Effective Java中文版(第2版)>中的每条规则都以简短.独立的小文章形式出现,并