当前位置: 首页 > news >正文

Class<?> 和Class<T >有什么区别

Class<?>Class<T> 在 Java 中都表示 Class 类型的对象,但它们的使用方式和作用略有不同。让我们详细分析它们的区别:

1. Class<?>(通配符 Class 类型)

  • ? 代表一个未知类型(Wildcard)。

  • Class<?> 表示任何类型的 Class 对象,但不限定具体类型。

  • 适用于泛型方法或需要处理不同类型 Class 的情况

  • 不能直接用于创建该类型的实例(因为 ? 代表不确定的类型)。

  • public void printClassInfo(Class<?> clazz) {
        System.out.println("Class name: " + clazz.getName());
    }
    
    printClassInfo(String.class);  // 输出: java.lang.String
    printClassInfo(Integer.class); // 输出: java.lang.Integer
    

    2. Class<T>(泛型 Class 类型)

  • T 是一个具体的泛型类型,代表某个确定的类型。

  • Class<T> 主要用于 泛型方法或类,确保类型安全。

  • 允许 T 作为类型参数,用于创建实例等操作。

  • public class InstanceCreator {
        public static <T> T createInstance(Class<T> clazz) throws Exception {
            return clazz.getDeclaredConstructor().newInstance();
        }
    }
    
    String str = InstanceCreator.createInstance(String.class);
    System.out.println(str); // 输出: 空字符串 ""
    

    ✅ 这里 Class<T> 允许我们传递一个 Class<String>,并确保 createInstance 方法返回的是 String 类型。

  • 3. Class<?> vs Class<T> 对比

    对比项Class<?>Class<T>
    含义任何类型的 Class 对象确定类型 TClass 对象
    泛型支持不能确定类型,只能作为参数传递允许创建 T 类型的实例
    类型安全不安全,只能操作 Object安全,可限定 T 的类型
    实例化❌ 不支持 newInstance()✅ 支持 newInstance()
http://www.dtcms.com/a/114207.html

相关文章:

  • 设计模式简述(一)设计原则
  • 1.0 软件测试全流程解析:从计划到总结的完整指南
  • C++浅谈转型操作符
  • 看爬山虎学本领 软爬机器人来创新 各种场景能适应
  • @reduxjs/toolkit 报错,解决
  • CF每日5题(1300-1500)
  • M-CTC-T: 面向大规模多语言语音识别的伪标签技术
  • 前后端分离下,Spring Boot 请求从发起到响应的完整执行流程
  • wordpress可视化数据采集Scrapes插件,WP博客网站自动采集发布
  • Python 匿名函数(Lambda函数)
  • kmpmanacher
  • 001 vue
  • 从零开始:在Qt中使用OpenGL绘制指南
  • 前向传播、反向传播
  • PDF处理控件Aspose.PDF教程:在Python、Java 和 C# 中旋转 PDF 文档
  • 无限滚动(Infinite Scroll)页面谷歌不收录!必须改回分页吗?
  • FastAPI依赖注入:链式调用与多级参数传递
  • Data_Socket和UDP_Socket
  • 【51单片机】3-3【定时器/计数器/中断】超声波测距模块测距
  • 传值、传址、传引用
  • 0基础 | 硬件 | 电源系统 一
  • LeetCode 1863.找出所有子集的异或总和再求和
  • [Windows] XHS-Downloader V2.4 | 小红书无水印下载工具 支持多平台批量采集
  • 最新版本尚硅谷硅谷甄选1-40集问题解析汇总
  • docker初始环境搭建(docker、Docker Compose、portainer)
  • Java的Selenium元素定位-cssSelector
  • 在蓝牙信号扫描中,dBm 的负值是正常现象,表示信号强度
  • Python地理数据处理 28:基于Arcpy批量操作实现——按属性提取和分区统计
  • JAVA SE:认识类和对象
  • 7. 记忆(Memory)机制:让AI拥有“短期记忆”与“长期记忆”