集册 Java实例教程 创建数组并使用反射设置其元素值

创建数组并使用反射设置其元素值

欢马劈雪     最近更新时间:2020-01-02 10:19:05

387
提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!
创建数组并使用反射设置其元素值

import java.lang.reflect.Array;

import java.lang.reflect.Constructor;

import java.lang.reflect.InvocationTargetException;

import java.util.regex.Pattern;
/**
 from
* nowjava.com 
**/

import java.util.regex.Matcher;

import java.util.Arrays;

import static java.lang.System.out;


public class ArrayCreator {

    private static String s = "java.math.BigInteger bi[] = { 123, 234, 345 }";

    private static Pattern p = Pattern

            .compile("^\\s*(\\S+)\\s*\\w+\\[\\].*\\{\\s*([^}]+)\\s*\\}");


    public static void main(String... args) {

        Matcher m = p.matcher(s);
//N o w  J a v a  . c o m 提供

        if (m.find()) {

            String cName = m.group(1);

            String[] cVals = m.group(2).split("[\\s,]+");

            int n = cVals.length;


            try {

                Class<?> c = Class.forName(cName);

                Object o = Array.newInstance(c, n);

                for (int i = 0; i < n; i++) {

                    String v = cVals[i];

                    Constructor ctor = c.getConstructor(String.class);

                    Object val = ctor.newInstance(v);

                    Array.set(o, i, val);

                }


                Object[] oo = (Object[]) o;

                out.format("%s[] = %s%n", cName, Arrays.toString(oo));


                // production code should handle these exceptions more gracefully

            } catch (ClassNotFoundException x) {

                x.printStackTrace();

            } catch (NoSuchMethodException x) {

                x.printStackTrace();

            } catch (IllegalAccessException x) {

                x.printStackTrace();

            } catch (InstantiationException x) {

                x.printStackTrace();

            } catch (InvocationTargetException x) {

                x.printStackTrace();

            }

        }

    }

}


展开阅读全文