java 泛型----T、?的使用

java中T表示泛型。?表示不确定的类型。

jdk使用K表示键,V表示值,T表示type类型,E表示enum枚举。这四个符号只是表示泛型名称,可以换成其他字母,但是需要在之前声明。

参考文章:java泛型:T与?的使用及区别_java map ? 和t用法-CSDN博客

示例代码如下:

java 复制代码
package javaCode;

import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;

public class Test<T1, T2> {
    public static void main(String[] args) {
        System.out.println(new Test<>().getT1());
        System.out.println(new Test<>().getT2());
        // T1, T2在new的时候用到,这里都初始化为String
        new Test<String, String>().getClassName("");
        // HashMaap的括号里不能使用T,E,T1,T2等不确定的东西,但是可以使用?做为通配符
        HashMap<?, ?> map = new HashMap<Object, String>();
        List<?> list = new ArrayList<String>();
    }

    public T1 getT1() {
        return (T1)"T1";
    }

    T2 getT2() {
        return (T2)"T2";
    }

    /**
     * <T>必须放在void或返回类型的前面
     * @param x
     */
    public <T> void getClassName(T x) {
        System.out.println(x.getClass().getName());
    }

    /**
     * Class前面缺少<T>必须定义,或者出现编译错误,
     * 这里的T可以改成其他字符,但是必须要声明
     * 当两个都是Class<?>,会自动匹配成T
     * 返回参数类型和参数中的类型:class<T> 或Class<?>
     * @param a
     * @return
     */
    public <T> Class<?> getClassAndList(Class<?> a) {
        System.out.println(a.getClass().getName());
        // 下面这个会报错,原因是会认为ArrayList必须是一种类型,List<>表示通配
        //List<?> list = new ArrayList<?>();
        List<?> aa = new ArrayList<T>();
        // 下面方法也是正确的
        List<T> t = new ArrayList<T>();
        System.out.println(aa);
        return a;
    }
}
相关推荐
i02089 小时前
SpringBoot 项目配置
java·spring boot·后端
计算机毕业设计小途9 小时前
计算机毕业设计推荐:基于springboot的快递物流仓库管理系统【Java+spring boot+MySQL、Java项目、Java毕设、Java项目定制定
java·spring boot·mysql
月屯9 小时前
后端go完成文档分享链接功能
开发语言·后端·golang
苹果醋39 小时前
VueX(Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式)
java·运维·spring boot·mysql·nginx
Franciz小测测10 小时前
Python连接RabbitMQ三大方案全解析
开发语言·后端·ruby
海梨花10 小时前
又是秒杀又是高并发,你的接口真的扛得住吗?
java·后端·jmeter
代码雕刻家10 小时前
C语言的左对齐符号-
c语言·开发语言
小肖爱笑不爱笑10 小时前
2025/11/19 网络编程
java·运维·服务器·开发语言·计算机网络
郑州光合科技余经理10 小时前
开发指南:海外版外卖跑腿系统源码解析与定制
java·开发语言·mysql·spring cloud·uni-app·php·深度优先
SuperherRo10 小时前
JAVA攻防-反序列化利用&JNDI注入&高版本绕过&依赖Jar包&gadge包链&自动Bypass
java·反序列化·jndi·高版本绕过