java 泛型

作者:原创时间:2022-03-15
文档

很多朋友都想知道java 泛型是什么?下面就一起来了解一下吧~

Java泛型是JDK 5中引入的一个新特性,泛型提供了编译时类型安全监测机制,该机制允许程序员在编译时监测非法的类型,泛型的本质是参数化类型,也就是所操作的数据类型被指定为一个参数。

泛型的使用

泛型有三种常用的使用方式:泛型类,泛型接口和泛型方法。下面讲一一简单介绍这三种使用方法:泛型类

一个泛型类(generic class)就是具有一个或多个类型变量的类。下面通过一个简单的Pair类作为例子。对于这个类来说,我们只关注泛型,而不会为数据存储的细节烦恼。下面是Pair类的代码:

/*
 * 泛型类
 * Java库中 E表示集合的元素类型,K 和 V分别表示表的关键字与值的类型
 * T(需要时还可以用临近的字母 U 和 S)表示“任意类型”
 */public class Pair {
    
    private T name;
    private T price;

    public Pair() {
    }

    public Pair(T name, T price) {
        this.name = name;
        this.price = price;
    }

    public T getName() {
        return name;
    }

    public void setName(T name) {
        this.name = name;
    }

    public T getPrice() {
        return price;
    }

    public void setPrice(T price) {
        this.price = price;
    }}

Pair类引入了一个类型变量T,用尖括号(<>)括起来,并放在类名的后面。泛型类可以有多个类型变量。例如,可以定义Pair类,其中第一个域和第二个域使用不同的类型:

public class Pair { ... }

类方法中的类型变量指定方法的返回类型以及域和局部变量的类型。例如:

private T first; //uses the type variable

用具体的类型替换类型变量就可以实例化泛型类型,例如:

Pair

可以将结果想象成带有构造器的普通类:

Pair()Pair(String,String)

和方法:

String getName()String getPrice()void setName(String)void setPrice(String)
泛型接口
public interface Generator {

    public T next();}

继承接口:

public class FruitGenerator implements Generator {

    @Override
    public String next() {
        return "Fruit";
    }}

或者也可以这样:

public class FruitGenerator implements Generator {

    private T next;

    public FruitGenerator(T next) {
        this.next = next;
    }

    @Override
    public T next() {
        return next;
    }

    public static void main(String[] args){
        FruitGenerator fruit = new FruitGenerator<>("Fruit");
        System.out.println(fruit.next);
    }}

泛型方法

这个方法是在普通类中定义的,而不是在泛型类中定义的。然而,这是一个泛型方法,可以从尖括号和类型变量看出这一点。注意,类型变量放在修饰符(这里是 public static)的后面,返回类型的前面。

以上就是小编今天的分享,希望能帮到大家~

显示全文
python range函数 linux ftp js 字符串转数字 电脑忘记开机密码怎么办 两个二维码怎么拼一起 怎样查看微信删除的聊天记录 微信扫码不能扫了怎么办 微信恢复删除的聊天记录 拼多多拒收在哪里操作 abstract java 交管12123怎么查科目一分数 antlr java ajax java ansible java aspect java 怎样改抖音名字的昵称 assert java asterisk java axis java bitset java java json java final java foreach java hashmap java lambda java random java stream java filereader maven安装配置 idea的maven配置 python 引用 js数组遍历方法 js json对象 js 遍历json java concat python调用dll python strip函数 python configparser模块 oracle coalesce rstudio使用教程