文章目录
泛型的概述
1.Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
2.早期的时候,使用Object来代表任意类型。但是这样在向上转型的是没有问题的,但是在向下转型的时候存在类型转换的问题,这样的程序其实是不安全的。所以Java在JDK5之后提供了泛型来解决这个问题
3.泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
4.泛型是一种把类型的明确工作推迟到创建对象或者调用方法的时候才去明确的特殊类型。
注意:类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)
泛型可用使用在方法、接口、类分别称作为:泛型类、泛型方法、泛型接口。
泛型类
格式:修饰符class类名<类型>{}
范例:public class Xd<T>{}
此处T可以随便写为任意标识,T、E、K、V等形式的参数常用于表示泛型
java
package com.xd;
public class Xd<T> {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
public T view(T t){
return t;
}
}
泛型方法
格式:修饰符<类型>返回值类型 方法名(类型 变量名){...}
范例:public<T> void view(T t){...}
java
package com.xd;
public class Xd {
/**
* public 修饰符
* <T> 该方法使用泛型T
* void 返回值
* 方法的名称
* 参数列表(T t)
*
*/
public <T> T view(T t) {
return t;
}
}
泛型接口
格式:修饰符 interface 接口名<类型>{...}
范例:public interface Xd <T>{...}
java
package com.xd;
public interface XdInterface<T> {
T view(T t);
}
java
package com.xd;
public class XdImpl<T> implements XdInterface<T> {
@Override
public T view(T t) {
return t;
}
}
java
package com.xd;
public class Test01 {
public static void main(String[] args) {
XdImpl<String> stringXd = new XdImpl<>();
String view = stringXd.view("1");
System.out.println(view);
}
}
类型通配符
1.类型通配符<?> 一般用于接受使用,不能够做添加
2.List<?>:表示元素类型未知的list,它的元素可以匹配任何类型
3.带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中
4.类型通配符上限:<? extends类型>List<?extends Xd>:它表示的类型是Xd或者子类
5.类型通配符下限:<? super 类型>List<?super Xd>:它表示的类型是Xd或者其父类型
可变参数
可变参数 又称 参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了。
格式:修饰符 返回值类型 方法名(数据类型... 量名){}
范例:public static int sum(int... a){}
可变参数 注意事项:
这里的可变参数变量其实是一个数组
如果一个方法有多个参数,包含可变参数,可变参数要放在最后