465. Java 反射 - 获取类的简单名

465. Java 反射 - 获取类的简单名

在反射 API 中,类的简单名 就是它在 源代码里出现的名字,不带包名。


1. 基本用法

java 复制代码
Class<?> c = String.class;
System.out.println("Simple name: " + c.getSimpleName());

输出:

java 复制代码
Simple name: String

说明

  • String 的完整类名是 java.lang.String
  • 简单名 就是去掉包之后的 String

2. 匿名类的简单名

匿名类在源码里没有名字,因此 getSimpleName() 返回的是 空字符串

java 复制代码
Object key = new Object() {}; // 匿名类
Class<?> c = key.getClass();
System.out.println("Simple name: " + c.getSimpleName());

输出:

java 复制代码
Simple name: 

说明

  • 匿名类的名字由编译器生成,通常包含 $1, $2 这样的后缀
  • 没有简单名 ,因此返回 ""

3. Lambda 表达式的简单名

Lambda 在字节码里也是编译器生成的类,它的名字可能包含外部类名和 $$Lambda

java 复制代码
import java.util.function.Supplier;

Supplier<String> supplier = () -> "Hello";
Class<?> c = supplier.getClass();
System.out.println("Simple name: " + c.getSimpleName());

可能输出(不同 JVM 环境略有不同):

java 复制代码
Simple name: Main$$Lambda/0x0000025851003538

说明

  • Main 是当前外部类的名字
  • $$Lambda/... 表示这是一个编译器生成的 lambda 类
  • 不同运行环境输出可能不一样,但规律类似

4. 对比 getCanonicalName() vs getSimpleName()

方法 输出 示例
getCanonicalName() 完整类名(带包) java.lang.String
getSimpleName() 简单名(源码中的类名) String
匿名类 getSimpleName() 空字符串 ""
Lambda getSimpleName() 外部类名 + $$Lambda/... Main$$Lambda/0x...

5. 总结

  • getSimpleName() 用来获取类的源码名字,不含包名
  • 匿名类 → ""(空字符串)
  • Lambda 类 → 外部类名 + $$Lambda/...(JVM 生成,环境相关)
  • 如果需要打印完整类名,用 getCanonicalName() 更合适
相关推荐
志尊宝7 分钟前
Vue3 零基础每日笔记(026):emit 子传父——defineEmits 与事件校验
前端·javascript·html·vue3
JaguarJack9 分钟前
Whim 是什么?一门把 PHP 被否决的设想真跑起来的实验语言
后端·php·服务端
风骏时光牛马15 分钟前
6个高频实用技术脚本案例,覆盖运维与办公自动化(可直接复用)
前端
明月_清风20 分钟前
MHS:AI Agent 开始连接物理世界
人工智能·后端·网络协议
ssshooter29 分钟前
Node.js 天生就是异步的,为什么还要消息队列?
javascript·后端·面试
爱吃红星柚30 分钟前
【学习】Elpis 抽离与发布 npm 包
前端·前端框架·node.js
福兮说42 分钟前
Gin 项目里的错误处理:让 Controller 不必知道错误是怎么来的
后端·go·gin·架构设计
n8n1 小时前
Spring AI Alibaba Graph 实战:用图编排复杂业务,替代硬编码,支持分支、并行与人工确认
后端
PedroQue991 小时前
0.5.0重磅发布:动画插件+H5体验全面优化
前端·uni-app
金虹桥程序员1 小时前
【动画】 📚 CSS 动画与 GPU 合成层优化全链路指南
前端·面试