泛型知识图谱
2024-05-30 11:19:17 7 举报
AI智能生成
泛型
作者其他创作
大纲/内容
基础知识
什么是泛型
泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)
注:我们的的参数是有类型的,但是我们把类型也定义一个类型,这个类型在入参具体类型时候进行明确,这就是泛型
注:我们的的参数是有类型的,但是我们把类型也定义一个类型,这个类型在入参具体类型时候进行明确,这就是泛型
为什么使用泛型
代码复用(避免业务逻辑冗余)以及类型转化时遇到的异常。
例如:1)当需要计算2个数据的和是,入参可能是int、long、double等类型,如果入参明确了类型就需要重载写多个不同类型参数的方法,增加多于的模板代码,如果使用泛型可以避免这种情况发生
2)如果我们把各种对象均作为object传入,读取的时候当需要将对象转为具体的目标类型时容易出现“java.lang.ClassCast Exception”异常
官方意义说明:
1,适用于多种数据类型执行相同的代码(代码复用)
2, 泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)
例如:1)当需要计算2个数据的和是,入参可能是int、long、double等类型,如果入参明确了类型就需要重载写多个不同类型参数的方法,增加多于的模板代码,如果使用泛型可以避免这种情况发生
2)如果我们把各种对象均作为object传入,读取的时候当需要将对象转为具体的目标类型时容易出现“java.lang.ClassCast Exception”异常
官方意义说明:
1,适用于多种数据类型执行相同的代码(代码复用)
2, 泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)
常用的泛型类型变量
一些常用的泛型类型变量:
E:元素(Element),多用于java集合框架
K:关键字(Key)
N:数字(Number)
T:类型(Type)
V:值(Value)
E:元素(Element),多用于java集合框架
K:关键字(Key)
N:数字(Number)
T:类型(Type)
V:值(Value)
泛型的使用
泛型类
GenericClass<T>
泛型接口
public interface GenericIntercace<T>{}
实现泛型接口_实现1
public class ImplGenericInterface1<T> implements GenericIntercace<T>
实现泛型接口_实现2
public class ImplGenericInterface2 implements GenericIntercace<String> {}
泛型方法
private static <T> T genericAdd(T a, T b)
使用示例
泛型方法定义
- 修饰符:方法的访问控制符,如public、private等。
- <T, U, ...>:尖括号内的T、U等是类型参数,可以有多个,用来表示泛型类型。这些字母是传统上的约定,你可以使用任何合法的标识符,但通常使用单个大写字母表示。
- 返回值类型:方法的返回类型,可以是具体类型,也可以是泛型类型T、U等。
- 方法名:泛型方法的名字。
- 参数列表:方法的参数,参数类型可以是具体的,也可以是泛型类型。
泛型类型限定
限定类型
上界限定(Upper Bounded Wildcards)
当你希望泛型类型必须是某个特定类型或其子类型时,可以使用上界限定。关键字extends标识“派生于”
当你希望泛型类型必须是某个特定类型或其子类型时,可以使用上界限定。关键字extends标识“派生于”
下界限定(Lower Bounded Wildcards)
如果你希望泛型类型可以是某个特定类型或其超类型时,可以使用下界限定。使用关键字super来指定下界。下界限定主要应用于泛型方法或通配符的使用中,不能适用于泛型类
如果你希望泛型类型可以是某个特定类型或其超类型时,可以使用下界限定。使用关键字super来指定下界。下界限定主要应用于泛型方法或通配符的使用中,不能适用于泛型类
无界泛型
通配符限定
无限制通配符:List<?> 可以接受任何类型的List。
上界通配符:List<? extends Number> 只接受Number或其子类的List。
下界通配符:虽然直接在类或方法定义中不常见,但在方法参数中使用List<? super Number> 表示可以接受Number或其父类的List。
上界通配符:List<? extends Number> 只接受Number或其子类的List。
下界通配符:虽然直接在类或方法定义中不常见,但在方法参数中使用List<? super Number> 表示可以接受Number或其父类的List。
限定目标
对类的限定
public class TypeLimitForClass<T extends List & Serializable>{}
对方法的限定
public static <T extends Comparable<T>> T getMin(T a, T b) {}
泛型中的约束与局限
1,不能实例化泛型类
2,静态变量或方法不能引用泛型类型变量,但是静态泛型方法是可以的
3,基本类型无法作为泛型类型
4,无法使用instanceof关键字或==判断泛型类的类型
5,泛型类的原生类型与所传递的泛型无关,无论传递什么类型,原生类是一样的
6,泛型数组可以声明但无法实例化
7,泛型类不能继承Exception或者Throwable
8,不能捕获泛型类型限定的异常但可以将泛型限定的异常抛
2,静态变量或方法不能引用泛型类型变量,但是静态泛型方法是可以的
3,基本类型无法作为泛型类型
4,无法使用instanceof关键字或==判断泛型类的类型
5,泛型类的原生类型与所传递的泛型无关,无论传递什么类型,原生类是一样的
6,泛型数组可以声明但无法实例化
7,泛型类不能继承Exception或者Throwable
8,不能捕获泛型类型限定的异常但可以将泛型限定的异常抛
0 条评论
下一页