繁体   English   中英

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

[英]How to create a constructor that takes an array parameter and initialise the values in an underlying array?

如何创建一个接受数组参数的构造函数并在 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在通过myClass构造函数传递arr后从未被初始化。

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

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

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

代码工作得很好。 检查您的print()方法。 这对我有用。

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<underlyingArray.length;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();
}

谢谢大家,我的代码不起作用的原因是因为我没有设置(未包含在代码段中)作为构造函数初始化的一部分的附加size变量。 这解释了我得到的 indexOutOfBounds 异常,因为size始终为 0。

很抱歉在信息不完整的情况下提出问题。 代码在上面的代码段中运行良好。 应得的反对票。 再次感谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM