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));
  }
}

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

转载于:https://www.cnblogs.com/badboyf/p/6290350.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值