Java泛型的定于与使用

发布时间 2023-12-04 12:18:43作者: 炎黄子孙,龙的传人

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,可以用在方法的任何地方或位置。
   如:
   - 参数、
   - 方法体内部
   - 返回值。
*/