java泛型的使用
泛型的产生机制就是放什么类型的数据进去,取出来的就是什么类型,而不用进行类型转换
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
泛型是在编译阶段有效
Java 泛型只在编译阶段有效,即在编译过程中,程序会正确的检验泛型结果。而编译成功后,class 文件是不包含任何泛型信息的
使用泛型可以指代任意对象类型;
泛型类
public class CC{
private T ob;
public CC(T ob) {
super();
this.ob = ob;
}
public T getOb() {
return ob;
}
public void setOb(T ob) {
this.ob = ob;
}
/**
* 打印T的类型
*/
public void print(){
System.out.println("T的实际类型是:"+ob.getClass().getName());
}
}
// begin test CC
CC cc=new CC(1);
cc.print();
int icc=cc.getOb();
System.out.println("i3="+icc);
CC cc2=new CC("我是泛型,好简单啊");
cc2.print();
String icc2=cc2.getOb();
System.out.println("s2="+icc2);
// end test CC
泛型方法
public class Box {
private T box;
public T getBox(T t){
this.box = t;
return t;
}
public void getType(){
System.out.println("T的实际类型为:"+box.getClass().getName());
}
public static void main(String[] args) {
Box box = new Box();
System.out.println(box.getBox(1));
box.getType();
System.out.println(box.getBox("Tom"));
box.getType();
}
}
T的实际类型为:java.lang.Integer
Tom
T的实际类型为:java.lang.String
返回值为任意类型的泛型
public static void f(T t){
System.out.println("T的类型是:"+t.getClass().getName());
}
public static void main(String[] args) {
f("");
f(1);
f(1.0f);
f(new Object());
}
泛型通配符
在泛型中,我们可以用 ? 来代替任意类型
public List wildCard(List list){
return list;
}
public static void main(String[] args) {
GenericTest gt = new GenericTest();
//构造一个 Interger 类型的集合
List integer = new ArrayList();
integer.add(1);
System.out.println(gt.wildCard(integer));
//构造一个 String 类型的集合
List str = new ArrayList();
gt.wildCard(str);
//构造一个 Object 类型的集合
List obj = new ArrayList();
obj.add(1);
obj.add("a");
System.out.println(gt.wildCard(obj));
//构造一个 任意类型的 集合,这和 List 存放数据没啥区别
List list = new ArrayList();
gt.wildCard(list);
}
private static void take(Demo a){
a.print();
}
public static void main(String[] args) {
Demo demo=new Demo(new Dog());
take(demo);
Demo demo2=new Demo(new Cat());
take(demo2);
}
泛型的上限和下限
①、上限: 语法(? extends className),即只能为 className 或 className 的子类
//通配符的下限,只能是 Number 或 Number的子类
public List wildCard(List
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?