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

匿名内部类的使用场景 java反射机制

一、匿名内部类的使用场景匿名内部类是一种没有显式类名、直接在创建对象时定义并实例化的内部类。它通常用于“一次性使用”的场景让代码更简洁紧凑。主要使用场景包括1. 事件监听器GUI 编程在 Swing、AWT 或 Android 开发中需要为按钮、菜单等组件添加事件处理器。匿名内部类可以避免为每个事件单独创建类文件。button.addActionListener(new ActionListener() { Override public void actionPerformed(ActionEvent e) { System.out.println(按钮被点击); } });2. 多线程Runnable / Thread当需要临时启动一个线程执行任务时匿名内部类比单独定义Runnable实现类更简洁。new Thread(new Runnable() { Override public void run() { System.out.println(线程运行中...); } }).start();3. 比较器Comparator对集合进行排序时Collections.sort()或Arrays.sort()需要传入Comparator接口的实现。匿名内部类常用于快速定义自定义排序逻辑。ListString list Arrays.asList(apple, pear, banana); Collections.sort(list, new ComparatorString() { Override public int compare(String s1, String s2) { return s1.length() - s2.length(); } });4. 回调函数或策略模式当需要一个简单的策略或回调逻辑且该逻辑只在此处使用时匿名内部类可避免定义多余的命名类。public interface Callback { void onSuccess(String result); } public void doAsync(Callback callback) { ... } // 调用时 doAsync(new Callback() { Override public void onSuccess(String result) { System.out.println(result); } });5. 自定义抽象类/接口的临时实现例如使用TimerTask、FilterServlet等抽象类或接口时若只用一次匿名内部类很方便。Timer timer new Timer(); timer.schedule(new TimerTask() { Override public void run() { System.out.println(定时任务执行); } }, 5000);匿名内部类的限制只能实现一个接口或继承一个抽象类/普通类。内部访问局部变量时该变量必须是final或实际不可变Java 8 后 effectivly final。不能定义静态成员常量除外。没有构造方法。现代替代方案Java 8如果接口只有一个抽象方法函数式接口可以用Lambda 表达式更简洁地替换匿名内部类。例如上面的Runnable、Comparator都可以改为 Lambdanew Thread(() - System.out.println(线程运行...)).start(); Collections.sort(list, (s1, s2) - s1.length() - s2.length());二、java反射机制Java反射机制是指在运行时动态地获取一个类的信息如方法、字段、构造器、注解等并能动态创建对象、调用方法、访问或修改成员包括私有成员的能力。核心功能获取Class对象Class.forName(类全名)、对象.getClass()、类名.class创建实例clazz.newInstance()或构造器的newInstance()访问成员方法getMethod()/getDeclaredMethod()并调用invoke()字段getField()/getDeclaredField()并调用get()/set()可配合setAccessible(true)打破封装构造器getConstructor()/getDeclaredConstructor()获取注解、父类、接口等元数据常见用途框架Spring、MyBatis的依赖注入、对象创建通用工具如JSON解析库根据字段名自动赋值动态代理JDK Proxy 基于接口反射调试或绕过私有成员进行测试注意事项性能比直接调用慢可考虑缓存Method/Field安全setAccessible(true)会破坏封装性可能带来安全风险权限在某些受限环境如安全管理器下可能失败
http://www.rkmt.cn/news/1376090.html

相关文章:

  • 小小屠龙原始火龙手游官网下载:小小屠龙原始火龙最新官方下载渠道
  • 普通人如何在 GPT‑5.5 时代保持竞争力:不被替代、学会协作、放大优势
  • IwaraDownloadTool:浏览器扩展视频嗅探引擎深度解析与架构设计
  • 阿里云服务器CPU 100%排查指南:识别伪装挖矿病毒的三步法
  • 鸿蒙PC:Qt适配OpenHarmony实战【书栖】:图书列表、阅读进度和简介卡片的组合实现
  • 卷积神经网络(CNN)与深度学习视觉应用综述
  • 十二周学习报告
  • 免费游戏加速神器OpenSpeedy:5分钟解锁极致流畅体验终极指南 [特殊字符]
  • Laravel vs ThinkPHP:主流PHP框架终极对决
  • 拉普拉斯变换与自注意力机制的革新融合
  • PC端微信消息加密机制与合法数据访问实践
  • 微信小程序ERR_CERT_DATE_INVALID错误深度解析与修复指南
  • 闪卡网页 第五人格 html 开源
  • 从滴滴D²-City到实战:手把手教你用Python脚本构建自己的交通场景YOLO数据集
  • 线性系统理论学懵了?手把手带你推导能控性格拉姆矩阵判据(附详细证明步骤)
  • window11 恢复右键刷新
  • 别再让Ubuntu22.04时间错乱了!用hwclock和timedatectl搞定硬件时钟时区的保姆级教程
  • Web渗透与移动逆向:两种安全范式的本质差异
  • 英雄联盟客户端美化革命:用LeaguePrank打造个性化游戏体验
  • DeepMech:基于图神经网络与模板学习的化学反应机理预测框架
  • 2026年Claude API中转站权威性能与成本榜单 企业级生产场景选型全指南
  • 5大架构优势解析:为什么选择BepInEx进行Unity游戏插件开发
  • RAID5双盘离线还能恢复吗?底层原理与实战抢救指南
  • 机器学习力场(MLFF)在量子材料原子模拟与设计中的实战应用
  • BepInEx 6.0技术揭秘:如何构建跨平台Unity插件框架的5大核心机制
  • Lipschitz常数与傅里叶级数在自动驾驶中的应用
  • BetterJoy:让Switch手柄在PC上完美工作的终极适配工具
  • JSON技术解析
  • ArchPilot:基于多智能体与代理评估的高效神经网络架构搜索框架
  • 3步解锁游戏语言障碍:XUnity自动翻译工具完全指南