java 泛型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 泛型相关的知识,希望对你有一定的参考价值。

1. 为什么使用泛型

2. 泛型是什么

3. 泛型方法

4. 泛型接口

5. 泛型类

6. 泛型擦除

7. 通配符

8. 泛型经典实例

ONE:为什么使用泛型

好程序的一个指标就是通用性。java可以使用多态机制,将方法参数设置为基类,从而调用方法时可以接受该基类和其子类。由于单继承受限太多,可以将方法参数设为接口,正是所谓的面向接口编程,从而再次提高程序的通用性。

通用性还有更好的做法就是让方法接收不具体的参数类型,也就是说参数不是一个具体的类或接口或常见类型,一份代码可以根据不同的需求,在实际使用中使用不同的类。具体而言就是将类型作为一个参数,使用的时候将这个参数用具体的类型来代替。这种需求就要依靠泛型机制来实现 ---- 编写更加通用的代码。

为容器提供更加安全的机制,在没有泛型前,容器类,如ArrayList是接受任何一个对象的,因为任何对象放进来之后都会向上转型为Object,而在取出的时候在向下转型为期待的类型,如果接受的对象类型不一致,在向下转型的时候就会出现错误,这个原因是由于当初没有检查机制造成的,现在推出了泛型,同时增加了这种检测机制,从而避免了这种事情的发生 ---- 提供更加安全的机制。

TWO : 泛型是什么

泛化的类型,也就是使用于很多类型的类型,也就是参数化类型的概念,即一个类型是一个参数,在使用过程中用<>括住类型参数,如<T>,T就代表类型参数,然后使用T来泛指类型做各种事情。

THREE : 泛型方法

对一个方法应用泛型和对一个类应用泛型没什么区别。

  public static <T> void  methodTest (T t){
        System.out.println(t);
    }
    public static void main(String[] args) {
        methodTest("hello world");
        methodTest(1);
    }

首先泛型方法都是先声明后使用,申明要在public static final 后边,同事必须在返回值前边,这样之后才能在方法中使用类型参数。

   public static <T> void getThing(T[] numbers){
      for (T t: numbers) {
           System.out.print(t + " ");
         }
   }

 

FOUR : 泛型接口

FIVE : 泛型类

参数化类型,这里指的是将一个类中的参数参数化类型,即这个类中的成员变量不是一个具体的类型,在使用这个类的时候才指定他。例如我们经常用到的ArrayList<Student> students 就是在我们使用ArrayList的时候才将ArrayList中的成员变量类型指定为User。

public class PageObject<T>{

  private T t;

}

在类名后边申明一个类型参数<T>,这个T在整个类中都可以使用,如果不申明一个类型参数,也可以使用<T,K,...,V>来申明多个。

public class PageObject<T>{

  protected T t;

  public T getT(){

    return t;  

  }

  public void setT(T t){

    this.t = t;

  }

}

PageObject<Integer> pageInteer = new PageObject<Integer>();

pageInteger.setT(1);

SIX : 泛型擦除

SEVEN : 通配符

 

以上是关于java 泛型的主要内容,如果未能解决你的问题,请参考以下文章

java泛型泛型的内部原理:类型擦除以及类型擦除带来的问题

Java 泛型泛型用法 ( 泛型编译期擦除 | 上界通配符 <? extends T> | 下界通配符 <? super T> )

java中的泛型

Java基础总结三(泛型异常)

Java基础总结三(泛型异常)

Java基础总结三(泛型异常)