泛型类与泛型方法
<T,E,K,V>
class
修饰符 class 类名<类型>{}
method
修饰符 <类型> 返回值类型 方法名(T t){}
优点:把运行时期的问题提前到 编译期避免了强制类型转换
~~ ---------------------分割线------------------------ ~~
泛型(generic)概述和基本使用
A:泛型概述
集合边上有一个尖括号,尖括号指的就是泛型.
限定集合存储的数据类型,如果加上这个引用数据类型,
就告诉你这个集合只能存储该类型对象和该类型的子类对象.
B:泛型好处
提高安全性(将运行期的错误转换到编译期)
省去强转的麻烦
C:泛型基本使用
<>中放的必须是引用数据类型,因为里面
D:泛型使用注意事项
前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)
泛型类:
泛型类的声明很简单,在类名后添加一对尖括号,在尖括号里声明泛型的参数名即可,可以声明多个类型参数。参数名理论上没有限制,为了方便阅读,一般的参数名命名规则:
E - 元素,主要由Java集合(Collections)框架使用。
K - 键,主要用于表示映射中的键的参数类型。
V - 值,主要用于表示映射中的值的参数类型。
N - 数字,主要用于表示数字。
T - 类型,主要用于表示第一类通用型参数。
S - 类型,主要用于表示第二类通用类型参数。
U - 类型,主要用于表示第三类通用类型参数。
V - 类型,主要用于表示第四个通用类型参数。
class xxx{}
class xxx<T,U>{}
泛型方法:
泛型方法的声明是在方法的返回值前面添加尖括号。
public void test(T t){}
只有在方法的返回值前面加了<>才表明为泛型方法,否则即使某个方法的参数列表含有泛型参数,也只是个普通方法,泛型方法是独立于类存在的,可以定义在普通类中也可以定义在泛型类中,所以说泛型方法中的参数与类中的参数并无关系,即使同名也一样。
并且泛型方法具有自动推断类型功能。
类型推断:泛型方法会根据参数列表和返回值自动推断出类型参数的真实类型。
Generic
package com.atlin.genericmethod;
/**
* program@: day15_CollSet
* description@:
* create@: 2020-10-11 17:14* @author: lin's
*/
/*
public class Generic {
public void show(String s){
System.out.println(s);
}
public void show(Integer i){
System.out.println(i);
}
public void show(Boolean b){
System.out.println(b);
}
}
*/
/*
//泛型类改进
public class Generic<T>{
public void show(T t){
System.out.println(t);
}
}
*/
//泛型方法改进
public class Generic {
public<T> void show(T t){
System.out.println(t);
}
}
GenericDemo
packagecom.atlin.genericmethod;;
/**
* program@: day15_CollSet
* description@:
* create@: 2020-10-11 17:17* @author: lin's
*/
public class GenericDemo {
public static void main(String[] args) {
/* Generic g = new Generic();
g.show("林青霞");
g.show(23);
g.show(true);
g.show(13.45);*/
/*
Generic<String> g1 = new Generic<String>();
g1.show("林青霞");
Generic<Integer> g2 =new Generic<Integer>();
g2.show(18);
Generic<Boolean> g3 = new Generic<Boolean>();
g3.show(true);*/
Generic g1 =new Generic();
g1.show("lin");
g1.show(12.122F);
g1.show(true);
}
}