泛型
为什么要使用泛型?
可以使集合内只添加指定类型,从而保证了类型安全。
Java中泛型只在编译阶段有效,即泛型信息不回机内到运行时阶段。
泛型类
- 对象实例化时不指定泛型,默认为:Object
- 泛型不同引用之间不能相互赋值
class A<T>{
private T key;
public void setKey(T key){
this.key=key;
}
public T getKey(){
return key;
}
}
A<String> temp = new A<String>();
Temp.setKey(“12asd”);
泛型接口
定义泛型接口
interface A<T>{
T test(T t);
}
实现泛型接口
- 未传入泛型实参时,与泛型类的定义相同,在声明类时需要将泛型的声明也一起加到类中。
class B1<T> implements A<T>{
public T test(T t){
return t;
}
}
- 如果实现接口时,指定了接口的泛型的具体数据类型,这个类实现接口的所有方法的位置都要将泛型替换成实际的具体数据类型。
class B2 implements A<String>{
public Strring test(String t){
return null;
}
}
在引用未传入泛型实参的类时,可添加不同泛型数据类型
B1<Object> b1 = new B1<Object>();
B1<String> b1 = new B1<String>();
B1<Integer> b1 = new B1<Integer>();
在引用传入泛型实参的类时,其泛型被规定。
B2 b2 = new B2();
泛型方法
泛型方法,在调用之前没有固定的数据类型,会在调用时,确定泛型的具体数据类型
class C{
//无返回值的泛型方法
public <T> void test(T s){
T t = s;
}
//有返回值的泛型方法
public <T> T test1(T s){
return s;
}
//可变参数的泛型方法
public <T> test2(T… strs){
for(T s : strs){
System.out.println(s);
}
}
}
本文地址:https://blog.csdn.net/qq_37915248/article/details/107898960