35、java的泛型类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18077275/article/details/89811267

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("拉小提琴");
    }
}

猜你喜欢

转载自blog.csdn.net/qq_18077275/article/details/89811267