java反射之通过反射了解集合泛型的本质(详解)

发布时间 - 2026-01-11 01:43:15    点击率:

本文接上文“java反射之方法反射的基本操作方法”,利用反射了解下java集合中泛型的本质

1、初始化两个集合,一个使用泛型,一个不使用

ArrayList list1 = new ArrayList();
ArrayList<String> list2 = new ArrayList<String>();

2、有定义类型可得在list2中添加int类型会报错

list2.add("Hello");
list2.add(20); //报错

3、获取两个对象的类类型进行比较

Class c1 = list1.getClass();
Class c2 = list2.getClass();
System.out.println(c1 == c2);

通过c1==c2结果返回true,说明编译之后集合的泛型是去泛型化的,java中集合的泛型是为了防止错误输入的,只在编译阶段有效,绕过编译就无效了

4、验证:通过方法的反射来绕过编译

try {
 Method m = c2.getMethod("add", Object.class);
 m.invoke(list2,20);
 System.out.println(list2);
} catch (Exception e) {
 e.printStackTrace();
}

5、输出结果

6、完整代码

package com.format.test;

import java.lang.reflect.Method;
import java.util.ArrayList;

/**
 * Created by Format on 2017/6/4.
 */
public class Test2 {
 public static void main(String[] args) {
  ArrayList list1 = new ArrayList();
  ArrayList<String> list2 = new ArrayList<String>();
  list2.add("Hello");
//  list2.add(20); //报错
  Class c1 = list1.getClass();
  Class c2 = list2.getClass();
  System.out.println(c1 == c2);
  /**
   * 反射操作都是编译之后的操作
   * c1==c2结果返回true,说明编译之后集合的泛型是去泛型化的
   * java中集合的泛型是为了防止错误输入的,只在编译阶段有效,绕过编译就无效了
   * 验证:通过方法的反射来绕过编译
   */
  try {
   Method m = c2.getMethod("add", Object.class);
   m.invoke(list2,20);
   System.out.println(list2);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

以上这篇java反射之通过反射了解集合泛型的本质(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# java  # 泛型  # 反射  # 深入分析JAVA 反射和泛型  # Java使用反射来获取泛型信息示例  # Java 基础详解(泛型、集合、IO、反射)  # Java 中利用泛型和反射机制抽象DAO的实例  # java基础之反射和泛型以及注解  # 应用Java泛型和反射导出CSV文件的方法  # Java反射  # 泛型在Json中的运用  # 报错  # 给大家  # 只在  # 射来  # 都是  # 是为了  # 希望能  # 这篇  # 可得  # 小编  # 大家多多  # 操作方法  # 解下  # 射了  # args  # int  # main  # String  # gt  # getClass 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Laravel怎么实现验证码(Captcha)功能  Python函数文档自动校验_规范解析【教程】  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  三星、SK海力士获美批准:可向中国出口芯片制造设备  高性能网站服务器部署指南:稳定运行与安全配置优化方案  详解jQuery中基本的动画方法  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  昵图网官方站入口 昵图网素材图库官网入口  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  网站建设要注意的标准 促进网站用户好感度!  如何在建站之星绑定自定义域名?  大连 网站制作,大连天途有线官网?  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  Laravel如何集成Inertia.js与Vue/React?(安装配置)  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  JS实现鼠标移上去显示图片或微信二维码  Laravel如何使用Service Container和依赖注入?(代码示例)  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  如何快速搭建自助建站会员专属系统?  如何利用DOS批处理实现定时关机操作详解  Laravel如何使用Vite进行前端资源打包?(配置示例)  html如何与html链接_实现多个HTML页面互相链接【互相】  Bootstrap整体框架之JavaScript插件架构  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  JS碰撞运动实现方法详解  如何在企业微信快速生成手机电脑官网?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  Laravel如何处理和验证JSON类型的数据库字段  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Laravel中的Facade(门面)到底是什么原理  如何基于云服务器快速搭建网站及云盘系统?  linux写shell需要注意的问题(必看)  如何生成腾讯云建站专用兑换码?  详解Android——蓝牙技术 带你实现终端间数据传输  如何在阿里云通过域名搭建网站?  高端云建站费用究竟需要多少预算?  如何快速生成橙子建站落地页链接?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  ,怎么在广州志愿者网站注册?