Java 的泛型
参见:Java
Java 泛型的参数只可以代表类,不能代表个别对象。由于Java泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型,而且无法直接使用基本值类型作为泛型类型参数。Java编译程序在编译泛型时会自动加入类型转换的编码,故运行速度不会因为使用泛型而加快。
由于运行时会消除泛型的对象实例类型信息等缺陷经常被人诟病,Java及JVM的开发方面也尝试解决这个问题,例如Java通过在生成字节码时添加类型推导辅助信息,从而可以通过反射接口获得部分泛型信息。通过改进泛型在JVM的实现,使其支持基本值类型泛型和直接获得泛型信息等。
定义一个泛型类:
public class Generic<K>{ //泛型
K[] arr;//定义数组来模拟队列
int maxSize;//定义数组最大容量
int front;//定义队列头指针
int rear;//定义队列尾指针}
代码块:
package queue;泛型就是吧那个int换成K类型的
public class Generic<K>{//泛型
K[] arr;//定义数组来模拟队列
int maxSize;//定义数组最大容量
int front;//定义队列头指针
int rear;//定义队列尾指针
//构造函数初始化
public Generic(int maxSize) {
this.maxSize = maxSize;
arr=(K[]) new Object[this.maxSize];//强转
front=-1;
rear=-1;
}
//判断队列是否为空
public boolean isEmpty() {
return rear==front;
}
//判断队列是否满
public boolean isFull() {
return rear==maxSize-1;
}
//入队
public void add(K value) {
if(isFull()) {
System.out.println("队列已满,不能添加");
return;
}
rear++;
arr[rear] = value;
}
//出队
public K remove() {
if(isEmpty()) {
throw new RuntimeException("队列为空,不能取数据");
}
front++;
return arr[front];
}
//显示队列
public void list() {
if(isEmpty()) {
System.out.println("队列为空");
return;
}
for(int i=front+1;i<=rear;i++) {
System.out.println("Queue["+i+"]="+arr[i]);
}
}
}
测试运行
package queue;//测试使用泛型 就是所有的类型都可以用
public class TestGeneric {
public static void main(String[] args) {
System.out.println("使用泛型如下案例:");
System.out.println("===使用队列管理整数类型的数据====");
Generic generic=new Generic<Integer>(6);
generic.add(6);
generic.add(7);
generic.list();
System.out.println("===使用队列管理字符串类型的数据====");
Generic generic1=new Generic<String>(6);
generic.add("张三");
generic.add("小白");
generic.list();
}
}
结果产出: