Java泛型基础

一、介绍

泛型就是将类型参数化的过程,就是把变量类型当做一个变量。

二、使用

泛型是JDK1.5增加的新特性,泛型有三种使用方式,分别为泛型类、泛型接口、泛型方法。

1.泛型类
class Generic {
    private T t;
    public Generic(T t) {
        this.t = t;
    }
}
//使用,jdk1.7之后,支持棱形语法
Generic generic1 = new Generic<>(1);
Generic generic2 = new Generic<>("hello");
2.泛型接口
interface Generic{
    void setValue(T t);
    T getValue();
}
3.泛型方法
public  void setValue(T t){
        System.out.println(t);
}
三、泛型通配符
1.泛型任意类型(匹配Object及任意类型)
public static void print(List list){
        System.out.println(list);
    }
//例如
List list = new ArrayList<>();
list.add("hello");
List list2 = new ArrayList<>();
list2.add(1);
print(list);
print(list2);
2.泛型上界(T为Number类型或者Number的子类型)
class Generic {
    private T t;
    public Generic(T t) {
        this.t = t;
    }
}
//例如:
Generic generic1 = new Generic<>(1);
Generic generic2 = new Generic<>(1.1);
//这里会发生编译错误
Generic generic3 = new Generic<>("hello");
3.泛型下界(?为String类型或者String的父类)
public static void print(List list){
        System.out.println(list);
    }
四、类型参数命名约定

最常用的类型参数名称是:

  • E - Element (Java Collections Framework广泛使用)
  • K - Key
  • N - Number
  • T - Type
  • V - Value
  • S,U,V etc. - 2nd, 3rd, 4th types
五、总结

1.将运行时可能发生的类型转换错误,提前到编译期检查。

//例如jdk1.5之前没有泛型的情况下
List list = new ArrayList();
list.add(1);
list.add("hello");
//这里会发生类型转换错误,运行时才会发现。
String str = (String) list.get(0);

2.复用代码逻辑.
3.包含任意通配符?,只能get,不能set

你可能感兴趣的:(Java泛型基础)