Java中约定俗成的泛型通配符【T、E、K、V、?】

文章目录

  • 背景
  • 通配符
    • 1、通配符T
    • 2、通配符E
    • 3、通配符K和V
    • 4、通配符?
  • 作用
    • 1、类型安全
    • 2、消除代码强制转换
    • 3、代码复用

背景

在Java语言中,使用泛型来实现参数化的类型,在编译时对输入的参数指定一种数据类型,检查类型是否匹配,避免ClassCastexception异常发生。

在Java中通常约定俗成的通配符,主要有 【T、E、K、V、?】,下面逐个过一遍。

通配符

1、通配符T

T,即type类型,表示任意类型的参数

private class AA<T>{
	private T t;
}

// 不带泛型
AA a = new AA();
a.set(new BB());
BB b = (BB) a.get(); // 强制类型转换

// 带泛型
AA<B> a = new AA<B>();
a.set(new BB());
BB b = a.get(); // 不用专门类型转换

2、通配符E

E,即element 元素,集合中的元素类型,比如定义数组

List<E> list = new ArrayList<>();

3、通配符K和V

K,即Key 键,V,即Value值,映射的键对应的数据类型,比如定义Map

Map<K,V> map = new HashMap<>();

4、通配符?

无界通配符 表示不指定类型,即可接收任意类型

public void getResult(List<?> list){
	return list.stream.anyMatch(key -> key.equal("123"));
}

上界通配符 类型是T或子类

public <T extends Serializable> T getResult(String key,Class<T> clas){
	Object value = map.get("name");
	return clas.cast(value);
}

下界通配符 类型是T或父类

public <void getResult(String key,<super Serializable>){
	Object value = map.set("name",key);
}

作用

1、类型安全

减少编译的时候报错

2、消除代码强制转换

减少类型转化的操作

3、代码复用

减少重复代码,比如对外提供统一的响应返回类。

你可能感兴趣的:(后端开发,数据处理,java,python,开发语言)