Java技术文章

Java反射—Array类的使用

2019-01-30  本文已影响8人  苡仁ilss

有关Java反射的另外的文章:https://www.jianshu.com/nb/29780510
不用说大家也知道java.lang.Array是对Java反射包中数组操作的一个类。JavaSE8的文档中对Array的描述是这样说的:

The Array class provides static methods to dynamically create and access Java arrays.

Array类提供静态方法来动态创建和访问Java数组。访问不难理解,动态创建可以细看一下。

让我们先看看java.util.Arrays

为什么要用反射实现数组的扩展

访问数组内的对象

static Object get(Object array, int index) 返回指定位置的元素
static XXX getXXX(Object array, int index) XXX是基本类型,同上
static void set(Object array, int index, Object value) 设置指定位置的对象
static void setXXX(Object array, int index, XXX z) 设置指定位置的对象,XXX基本数据类型
static Object newInstance(Class<?> componentType, int length) 新建一个对象的数组。

以上来自Java SE *官方文档 https://docs.oracle.com/javase/8/docs/api/

完整代码如下

package io.ilss.reflection;

import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * className ArrayTest
 * description ArrayTest
 *
 * @author feng
 * @version 1.0
 * @date 2019-01-29 23:42
 */
public class ArrayTest {
    public static void main(String[] args) {
        double[] arr = {1.1, 1.2, 1.4, 12.2};
        arr = (double[]) goodCopyOf(arr, 10);
        System.out.println(Arrays.toString(arr));

        String[] arr1 = {"aa", "bb", "cc"};
        arr1 = (String[]) goodCopyOf(arr1, 10);
        System.out.println(Arrays.toString(arr1));

        System.out.println("ClassCastException");
        arr1 = (String[]) badCopyOf(arr1, 20);
    }

    private static Object[] badCopyOf(Object[] arr, int newLength) {
        Object[] newArray = new Object[newLength];
        System.arraycopy(arr, 0, newArray, 0, Math.min(arr.length, newLength));
        return newArray;
    }

    private static Object goodCopyOf(Object arr, int newLength) {
        Class cls = arr.getClass();
        if (!cls.isArray()) {
            return null;
        }
        Object newArray = Array.newInstance(cls.getComponentType(), newLength);
        System.arraycopy(arr, 0, newArray, 0, Math.min(Array.getLength(arr), newLength));
        return newArray;
    }
}

相关代码的Github:https://github.com/ilssio/java-base-ilss

上一篇 下一篇

猜你喜欢

热点阅读