如何给ArrayList<Integer>对象里面添加字符串?
来源:互联网 发布:淘宝快递模板下载 编辑:程序博客网 时间:2024/06/05 19:12
编写java文件如下:
package org.danni.reflect_1;import java.util.ArrayList;public class ArrayListDemo { public static void main(String[] args) { //创建集合对象 ArrayList<Integer> array = new ArrayList<Integer>(); array.add(10); System.out.println(array); }}
使用xJad反编译文件打开编译后的class文件,我们可以发现内容变成下面这样的了
对应的class字节码文件如下:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.// Jad home page: http://kpdus.tripod.com/jad.html// Decompiler options: packimports(3) fieldsfirst ansi space // Source File Name: ArrayListDemo.javapackage org.danni.reflect_1;import java.util.ArrayList;public class ArrayListDemo{ public ArrayListDemo() { } public static void main(String args[]) { ArrayList array = new ArrayList(); array.add(Integer.valueOf(10)); System.out.println(array); }}
我们可以发现在Class文件中,在add方法内进行了强制类型转换。而ArrayList中的泛型却不见了。可见这个泛型只是给编译器看的。
现在我们再看一下add()方法的源码:add方法中传递的必须是E类型,也就是此处的Integer类型
public boolean add(E e) { ensureCapacity(size + 1); // Increments modCount!! elementData[size++] = e; return true;}
因此我们可以想到要想在一个ArrayList对象中插入字符串,只要获得他的class字节码文件就可以了,因为在字节码文件中是在add方法内进行了强制类型转换,所以我们传递任何类型的参数都是可以的。
要获得class字节码文件,我们自然而然也就想到了要使用反射,以为这个题目的解决答案就如下所示:
public class ArrayListDemo { public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { //创建集合对象 ArrayList<Integer> array = new ArrayList<Integer>(); //获得array对象的字节码对象,返回的结果是个Class对象 Class c = array.getClass(); //参数解释:(方法名,参数类型的class) //add(E e) :因此参数是个泛型E,也就是Object类型 Method m = c.getMethod("add", Object.class); m.invoke(array, "添加的字符串是我"); //调用array的add方法,并传入值 m.invoke(array, "再添加一个字符串呀"); System.out.println(array); }}
输出:
[添加的字符串是我, 再添加一个字符串呀]
阅读全文
0 0
- 如何给ArrayList<Integer>对象里面添加字符串?
- 给定一个 ArrayList<Integer>的一个对象,实现在这个集合中添加一个字符串
- 如何在ArrayList<Integer>中添加String类型数据
- 如何给数组添加字符串
- 在webkit里面给window对象添加方法
- 在DataGrid里面添加Label后,如何给Label赋值
- 如何给NSMutableArray添加空对象
- 如何给JavaScript添加一个自定义对象
- 如何给循环中的对象添加事件
- JavaScript 如何给对象添加方法
- 泛型Integer添加字符串
- 反射示例2:在ArrayList<Integer>集合中添加一个字符串数据
- 使用反射在 ArrayList<Integer> 集合中添加一个字符串数据;
- C# ArrayList如何动态添加对象及取值
- framwork里面添加字符串
- 如何让ArrayList<Integer>添加一个String类型的元素呢
- ArrayList<Integer>如何转换为数组
- ArrayList<Integer>如何转换为int[]数组
- 128_容器_工具类Collections方法详解_洗牌
- C# SQL Server的封装(SQLDataAdapter等)之二(共二)
- Android View绘制和显示原理简介
- Protocol Buffer C++应用实例
- vim和shell脚本基础
- 如何给ArrayList<Integer>对象里面添加字符串?
- C基础知识和基本数据类型
- 暑假集训日记--8.5--搜索
- maven debug
- 小case
- 磁盘分区与加密
- 表达式与流程控制
- Programing Exercise 2017-08-05
- mysql高可用MHA配置