Java泛型基础

2020-04-26  本文已影响0人  lxqljc
一、介绍

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

二、使用

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

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

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

五、总结

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

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

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

上一篇下一篇

猜你喜欢

热点阅读