【面试题精讲】泛型的使用方式有哪几种?

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

首发博客地址

面试题手册

系列文章地址


泛型的使用方式有以下几种:

  1. 泛型类:定义一个类时,可以在类名后面加上尖括号<>,并在其中指定类型参数。这样,在类中就可以使用这个类型参数来声明属性、方法等。例如:
java 复制代码
public class MyGenericClass<T> {
    private T value;

    public void setValue(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

在上述代码中,MyGenericClass 是一个泛型类,T 是类型参数,可以在类中的属性和方法中使用。

  1. 泛型接口:与泛型类类似,可以在接口名后面加上尖括号<>,并在其中指定类型参数。然后在实现该接口时,需要指定具体的类型。例如:
java 复制代码
public interface MyGenericInterface<T> {
    void doSomething(T value);
}

public class MyImplementation implements MyGenericInterface<String> {
    @Override
    public void doSomething(String value) {
        System.out.println("Doing something with " + value);
    }
}

在上述代码中,MyGenericInterface 是一个泛型接口,T 是类型参数。MyImplementation 类实现了 MyGenericInterface 接口,并指定了类型参数为 String。

  1. 泛型方法:在普通类或者非泛型类中,可以定义一个泛型方法,即在方法返回值前面加上尖括号<>,并在其中指定类型参数。例如:
java 复制代码
public class MyGenericMethod {
    public <T> void printValue(T value) {
        System.out.println("Value: " + value);
    }
}

在上述代码中,printValue 是一个泛型方法,<T> 是类型参数,在方法中可以使用这个类型参数。

  1. 通配符 :有时候我们可能不关心具体的类型参数,只需要保证它是某种类型或者其子类即可。这时可以使用通配符来表示未知类型。通配符有两种形式:? extends T 表示类型参数是 T 或者 T 的子类;? super T 表示类型参数是 T 或者 T 的父类。例如:
java 复制代码
public void processList(List<? extends Number> list) {
    for (Number number : list) {
        // do something with number
    }
}

public void addToList(List<? super Integer> list) {
    list.add(1);
}

在上述代码中,processList 方法接收一个列表,其中元素的类型必须是 Number 或者 Number 的子类。addToList 方法接收一个列表,其中元素的类型必须是 Integer 或者 Integer 的父类。

以上就是泛型的几种使用方式。通过使用泛型,可以增加代码的灵活性和安全性,使得代码更加通用和易于维护。

本文由mdnice多平台发布

相关推荐
高频因子挖掘机3 分钟前
盘中筛选要同时看价格和盘口?按需分层比“一次全拿”更好维护
后端·github·api
asong8 分钟前
从写代码到部署上线,Cloudflare 给 AI 配了一把新钥匙
前端·javascript·后端
卷无止境9 分钟前
当AI写代码遇见Rust为什么会卡壳
后端·python
Percy_kk12 分钟前
Django的CRUD映射
后端·django
用户EasyAdminBlazor14 分钟前
Blazor Server 性能优化实战:Circuit、数据库、Redis 与并发
后端
王中阳Go18 分钟前
Agent 第一句就 500,我们查了三轮:入口日志少打了一个参数
后端·agent·ai编程
羑悻18 分钟前
穿越Docker内核迷雾:揭秘镜像分层存储的叠加态与卷挂载的多维空间穿梭技术
后端·docker·容器
励志不掉头发的内向程序员19 分钟前
从鼠标点击到画出一条线:CAD 交互层的状态机设计
后端·架构
用户EasyAdminBlazor25 分钟前
EasyAdminBlazor 日志系统源码解析:为什么数据库日志需要有界队列?
后端
Sylven25 分钟前
【DevOps 开发流程】问题+标签驱动开发,可视化你和AI的开发进度
后端