泛型其主要目的是能够创建具备类型安全的集合框架,如链表、散列映射等数据结构java
最重要的一个优势是:在使用这些泛型类创建数据结构时,没必要进行强制类型转换,即运行时不进行类型检查,JDK1.5是支持泛型的编译器,它将运行时的类型检查提早到编译时执行,是代码更安全。web
泛型类:安全
使用“class 名称”声明一个类,这种声明类就称为泛型类数据结构
class ShowObject框架
上述ShowObject表示泛型类名称,E是其中的泛型,其中E没有指定是任何类型的数,它能够是任何对象或接口,但不能是基本类型数据ide
ShowObject能够用泛型E做为本身的一个成员或方法中的参数,ShowObject.java的代码以下:svg
public class ShowObject{code
public showMess(E b){xml
String mess = b.toString();//泛型变量只能调用toString()方法对象
System.out.println(mess);
}
泛型类声明和建立对象时,类名后多了一个"<>",并且必需要用具体的类型替换"<>"中的泛型,例如:
实例代码:
public class Demo39{
public static void main(String[] args){
ShowObject ShowDog = new ShowObject<>();
ShowObject 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();
}
}