Java基础(一) 泛型

2022-01-10 11:02:07 浏览数 (2)

泛型概念

  • 本质是参数化类型,把类型作为参数传递。
  • 常见形式有泛型类、泛型接口、泛型方法。
  • 语法 T成为类型占位符,表示一种引用类型,可以写多个逗号隔开。
  • 好处 1. 提高代码重用性 2. 防止类型转换异常,提高代码安全性。
  • 最近介绍泛型集合。

泛型类

代码语言:javascript复制
// 写一个泛型类。
public class MyGeneric<T>{
  //使用泛型T。
  //1 创建变量。
  T t;
  //2 泛型作为方法的参数。
  public void show(T t){
    sout(t);
  }
  //3 泛型作为方法的返回值。
  public T getT(){
    return t;
  }
}

使用操作

代码语言:javascript复制
// 使用泛型类
public class TestGeneric{
  public static void main(String[] args){
    //使用泛型类创建对象
    // 注意: 1. 泛型只能使用引用类型
    //			 2. 不用泛型类型对象之间不能相互赋值
    MyGeneric<String> myGeneric = new MyGeneric<String>();
    myGeneric.t = "hello";
    myGeneric.show("hello world!");
    String string = myGeneric.getT();
  
    MyGeneric<Integer> myGeneric2 = new MyGeneric<Integer>();
    myGeneric2.t = 100;
    myGeneric2.show(200);
    Integer integer = myGeneric2.getT();
  
  }
}

泛型接口

语法:接口名,如下所示。

注意:不能泛型静态常量。

代码语言:javascript复制
public interface MyGeneric<T>{
    String a = "son";        //接口的内容,可以申明静态常量,默认public static final属性。
    T t;                     //错误的!!!!!不可以泛型静态常量。
    T sort(T t);             //允许使用泛型方法,下文有介绍。
}

1,实现类

三个实现方式

代码语言:javascript复制
public class impl implements MyGeneric<T>{}

或者

代码语言:javascript复制
public class impl implements MyGeneric<String>{
    String sort(String t){};
}        //直接定义泛型的类型,但是泛型声明也需要改。

或者

代码语言:javascript复制
public class impl<T> implements MyGeneric<T>{
   
}    

泛型方法

语法: <T>返回值类型

代码语言:javascript复制
public class MyGenericMethod{
  //泛型方法
  public <T> T show(T t){
    sout("泛型方法"   t);
    return t;
  }
}

//调用
MyGenericMethod myGenericMethod = new MyGenericMethod();
myGenericMethod.show("字符串");// 自动类型为字符串
myGenericMethod.show(200);// integer类型
myGenericMethod.show(3.14);// double类型

后续需要补充。

泛型集合

概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致

特点:

  • 编译时即可检查,而非运行时抛出异常
  • 访问时,不必类型转换(拆箱)
  • 不同泛型之间应用不能相互赋值,泛型不存在多态

比如LinkedList类底层方法是

代码语言:javascript复制
public class LinkEdList<E> {}

所以使用泛型集合就是

代码语言:javascript复制
List<String> list = new LinkedList<String>();

0 人点赞