首页 > 解决方案 > 如何创建一个接受数组参数并初始化底层数组中的值的构造函数?

问题描述

如何创建一个接受数组参数的构造函数并在 Java 中初始化底层数组中的值?

构造函数应该这样做,当我在 main 中调用它时,将数组作为参数传递给它,构造函数输出的初始化对象与数组参数相同。

public class MyClass<E> {

protected E[] underlyingArray;

public MyClass(Object[] arr) {
     underlyingArray = (E[]) new Object[arr.length];
     for (int i = 0; i < arr.length; i++) {
          this.underlyingArray[i] = (E) arr[i];
     }
}

public void print() {
    for (int i = 0; i < size; i++) {
        System.out.println(i + ": " + underlyingArray[i]);
    }
}

public static void main(String[] args) {
final String[] array = { "d", "e", "f" };
final MyClass myArray = new MyClass((Object[])array);
myArray.print();

预期的:

0: d
1: e
2: f

实际:我得到一个索引越界异常,因为在通过构造myArray函数后从未初始化过。arrmyClass

我在MyClass构造函数中尝试了几种组合,但未能myArray成功初始化底层数组。

标签: javaarraysconstructorinitialization

解决方案


该代码有效,但在您的情况下不需要泛型

class MyClass {

private Object[] underlyingArray;

MyClass(Object[] arr) {
    underlyingArray = new Object[arr.length];
    for (int index = 0; index < arr.length; index++) {
        this.underlyingArray[index] = arr[index];
    }

}

public void print() {
    for (int index = 0; index < underlyingArray.length; index++) {
        System.out.println(index + " : " + underlyingArray[index]);
    }
}

public static void main(String[] args) {
    final String[] array = { "d", "e", "f" };
    final MyClass myArray = new MyClass(array);
    myArray.print();
}}

推荐阅读