美文网首页Java 杂谈
CoreJava笔记 - 范型程序设计(1)

CoreJava笔记 - 范型程序设计(1)

作者: 杀死BL | 来源:发表于2018-07-26 09:58 被阅读5次

范型的目的

  • 代码被不同类型的对象所重用:

    • 范型以前依靠Object的继承来实现,问题在于没有类型检查,Cast错误在最后一刻发生。
    • 范型:在编译器层次对代码进行检查,避免类型错误,带来更好的可读性安全性
  • 范型的语法:

    • 范型类: ArrayList<String> files = new ArrayList<String>();
    • 范型方法:
      • 定义:public static <T> T getMiddle(T... a) {return a[a.length/2];}
      • 调用:String middle = ArrayAlg.<String>getMiddle("M", "Q", "A");
  • 范型设计的3个层次:

    • 能使用范型库
    • 用Java范型的原理来解决问题
    • 设计自己的范型库和范型方法

简单的范型类

  1. 类型变量经常用单个大写字母来表示

    • E:数组元素
    • K、V:键和值
    • T(及相邻字母U、S):类型
  2. 范型类可以看作是普通类的工厂

public class Pair<T> {
    private T first;
    private T second;
    
    public Pair() {first = null; second = null;}
    
    public Pair(T first, T second) {
        this.first = first; this.second = second;} 
    
    public T getFirst() {return first;}
    public T getSecond() {return second;}
    
    public void setFirst(T newValue) {first = newValue;}
    public void setSecond(T newValue) {second = newValue;}
}

这个范型类在指定类型后Pair<String>,变为:

Pair<String>
private String first;
private String second;
Pair<String>()
Pair<String>(String, String)
String getFirst();
String getSecond();
void setFirst(String); 
void setSedond(String); 

有限定的范型类

  1. T需要支持compareTo方法,所以不能是随意的类,必须implements Comparable接口。可以对范型类型进行限定:

    public static <T extends Comparable> T min(T[] a)

  2. 范型的限定可以支持多个接口:用&连接
    <T extends Comparable & Serializable>

相关文章

网友评论

    本文标题:CoreJava笔记 - 范型程序设计(1)

    本文链接:https://www.haomeiwen.com/subject/jdvvmftx.html