Java泛型的定于与使用

Java泛型的定于与使用

泛型也叫泛类型。Java中可以声明泛型的地方。
泛型的分类:

  • 泛型类:在类的定义时,声明泛型
  • 泛型接口:在接口的定义时,声明泛型
  • 泛型方法:在类的方法上声明泛型

一、泛型类

1、语法

定义泛型:

class Name <T1, T2, ... , Tn>  {
    //
}
/*
 * T 代表一个 Java类,在类上声明的泛型。
*/

2、举例

定义泛型

/* 类上泛型的定义 */
public class Foo <T> {
    
    // 用法1:泛化成员变量。
    // 即:变量的类型由外部指定
    private T info;
    
    
    // 用法2:构造方法的类型
    public Foo (T info) {
        this.info = info;
    }
    
    // 用法3:方法的返回类型
    public T getInfo(){
        return info;
    }
    
}

使用泛型

/* 
 * 类的使用:
 * 使用时再传入具体的类型
 */
Foo foo = new Foo <String> ("hello");

二、泛型接口

泛型接口的声明与泛型类一致。

1、语法

public interface Name <T> {
    T getInfo();
}

2、实现

泛型接口有2种实现:

  • 实现类明确声明类型
  • 实现类不明确声明类型

3、举例

前提条件,接口声明如下:

public interface Context <T> {
    T getContext();
}

3.1 实现类1:(泛型类型明确)

// 实现类的泛型类型明确为:String
public class TomcatContext implements Context<String> {
    
    @override
    public String getContext() {
        return "Tomcat"
    }
}

3.2 实现类2:(泛型类型不明确)

// 从左向右数:第一个 T 表示:需要将泛型在类上声明,后面才能使用。
public class SpringContext <T> implements Context<T> {
    
    @override
    public T getContext() {
        return null;
    }
}

三、泛型方法

泛型方法是在调用方法时指明泛型的具体类型。

对比:

  • 泛型类是在类实例化时指明泛型的具体类型。

1、分类

  1. 普通方法
  2. 静态方法
  3. 抽象方法
  4. final 修饰的方法
  5. 构造方法

2、语法

public <T> T foo (T obj){
    
}

/**
说明:
1、尖括号内为类型参数声明列表。位于返回值或void之前。
2、尖括号内声明的T,可以用在方法的任何地方或位置。
   如:
   - 参数、
   - 方法体内部
   - 返回值。


注意:
泛型方法和泛型类中的方法加以区分:
1、如果泛型类上已经声明了泛型,则在使用泛型类中的方法时,
   不需要声明泛型,可以直接使用泛型(作为入参或返回值)。
2、如果类上没声明泛型,则泛型方法需要自己加一个 <T> ,
   对泛型进行声明:这就是泛型方法。

*/
posted @ 2023-12-04 12:13  炎黄子孙,龙的传人  阅读(10)  评论(0编辑  收藏  举报