欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

如何给ArrayList对象里面添加字符串?,arraylist字符串

来源: javaer 分享于  点击 14077 次 点评:266

如何给ArrayList对象里面添加字符串?,arraylist字符串


编写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.java

package 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);
    }
}

输出:

[添加的字符串是我, 再添加一个字符串呀]

相关文章

    暂无相关文章

用户点评