泛型其主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构
最重要的一个优点是:在使用这些泛型类建立数据结构时,不必进行强制类型转换,即运行时不进行类型检查,JDK1.5是支持泛型的编译器,它将运行时的类型检查提前到编译时执行,是代码更安全。
泛型类:
使用“class 名称<泛型列表>”声明一个类,这种声明类就称为泛型类
class ShowObject
上述ShowObject表示泛型类名称,E是其中的泛型,其中E没有指定是任何类型的数,它可以是任何对象或接口,但不能是基本类型数据
ShowObject可以用泛型E作为自己的一个成员或方法中的参数,ShowObject.java的代码如下:
public class ShowObject{
public showMess(E b){
String mess = b.toString();//泛型变量只能调用toString()方法
System.out.println(mess);
}
泛型类声明和创建对象时,类名后多了一个"<>",而且必须要用具体的类型替换"<>"中的泛型,例如:
ShowObject showA;
showA=new ShowObject();
实例代码:
public class Demo39{
public static void main(String[] args){
ShowObject<Dog> ShowDog = new ShowObject<>();
ShowObject<Cat> ShowCat = new ShowObject<>();
showDog.showMess(new Dog());
showCat.showMess(new Cat());
}
}
public class Cat{
@Overried
public String toString(){
return “一只小猫”;
}
}
public class Dog{
@Overried
public String toString(){
return “一只小狗”;
}
}
public class ShowObject{
public void showMess(E e){
System.out.println(e.toString());
}
}
泛型接口:
使用"interface名称<泛型列表>"声明一个接口,这样声明的接口称作泛型接口,如:
interface Listen{
void listen(E x);
}
上述中Listen是泛型接口的名称,E是其中的泛型,泛型类和普通类都可以实现泛型接口,但普通类实现泛型接口时,必须指定泛型接口列表中的具体类型
实例代码:
public class Demo45{
public static void main(String[] args){
Student student = new student();
Teacher student = new Teacher();
student.listen(new Piano());
teacher.listen(new Violin());
}
}
public interface Listen{
void listen(E e);
}
public class Piano{
void play(){
System.out.println(“弹奏钢琴”);
}
}
public class Violin{
void pull(){
System.out.println(“拉小提琴”);
}
}
public class Student implements Listen{
@Override
public void listen(Piano e){
e.play();
}
}
public class Teacher implements Listen{
@Override
public void listen(Violin e){
e.pull();
}
}