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