当前位置: 首页 > 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()

相关文章:

  • 设计模式简述(一)设计原则
  • 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【定时器/计数器/中断】超声波测距模块测距
  • 传值、传址、传引用