目录
1.泛型的定义方式
泛型存在的原因就是为了向下转型的方便。
本质上是程序员定义的安全类型。
语法:类名<T>
T代表一个类型的名称。
注意:
- 泛型的类型参数只能是类类型,不能是简单类型,意思就是只能在类后面加那个玩意
- 泛型类型个数可以是多个如:类名<K,V>
- 可以使用extends关键字限制泛型的类型
- 可以使用通配符限制泛型类型
2.泛型的常规用法
用法:
- 单类型的如:类名<T>
- 多类型的如:类名<T1,T2>
- 可以定义泛型数组如:T[] arrary;
- 但是不能用泛型数组建立数组实例,错误例子:T[] arrary=new T[10];就是不对的
- 集合类声明容器的元素下面有列表
集合类 | 泛型定义 |
---|---|
ArrayList | ArrayList<E> |
HashMap | HashMap<K,V> |
HashSet | HashSet<E> |
Vector | Vector<E> |
3.泛型的高级用法
高级用法:
- 限制泛型的可用类型如:class 类名<T extends anyClass> anyClass是某个接口或者类
- 第一条的意思就是,定义的泛型只能是设置固定类或者接口的类型,从而达到限制的目的
- 使用类型通配符如:泛型类名称<? extends List>a=null;意思就是类型未知需要使用是进行单独实例化
- 泛型类和接口也是可以被继承和实现的
4.实例:
有关转型的例子:
package com.e.cn;
/*
这次的几个实例用到了Object类和包装类
不太清楚的可以看我的之前的文章继承,接口,多态
包装类也会相关的文章
*/
public class Test {
//Object类是所有类的父类
private Object object;
public Object getObject() {
return object;
}
public void setObject(Object object){
this.object=object;
}
public static void main(String[] args) {
Test test=new Test();
//向上转型
test.setObject(new Boolean(true));
System.out.println(test.getObject());
test.setObject(new Float(1.2f));
//向下转型
Float f=(Float) test.getObject();
System.out.println(f);
}
}
结果:
true
1.2
泛型的定义方式例子:
package com.e.cn;
public class Test1<T> {
private T x;
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
public static void main(String[] args) {
//实例化一个Boolean类型的对象
Test1<Boolean> booleanTest1= new Test1<>();
//实例化一个Float类型的对象
Test1<Float> floatTest1=new Test1<>();
booleanTest1.setX(true);
floatTest1.setX(1.2f);
Boolean b=booleanTest1.getX();
Float f=floatTest1.getX();
System.out.println(b);
System.out.println(f);
}
}
结果:
true
1.2
泛型的常规用法数组类型:
package com.e.cn;
//泛型的数组类型
public class Test2<T> {
private T[]array;
public void setArray(T[] array) {
this.array = array;
}
public T[] getArray() {
return array;
}
public static void main(String[] args) {
Test2<String> test2=new Test2<>();
String[]strings={"小明","小红","小李","小兰","小刚","小帅","阿伟"};
test2.setArray(strings);
//输出
for (String str:test2.getArray()
) {
System.out.println(str);
}
}
}
结果:
小明
小红
小李
小兰
小刚
小帅
阿伟
泛型的常规用法集合类类型:
package com.e.cn;
import java.util.HashMap;
import java.util.Map;
/*
这个程序用到了集合类不知道的可以看我之前的文章集合类
*/
public class Test3 <K,V>{
//定义一个hashMap的实例
public Map<K,V>map=new HashMap<>();
//设置put方法,将对应的键值和键名存入集合对象中
public void put(K k,V v){
map.put(k, v);
}
public V get(K k){
return map.get(k);
}
public static void main(String[] args) {
Test3<Integer,String> test3=new Test3<>();
for (int i=0;i<5;i++){
test3.put(i,"我的号码是:"+i);
}
for(int i=0;i<test3.map.size();i++){
System.out.println(test3.get(i));
}
}
}
结果:
我的号码是:0
我的号码是:1
我的号码是:2
我的号码是:3
我的号码是:4