Как создать конструктор, который принимает параметр массива и инициализирует значения в базовом массиве? - PullRequest
0 голосов
/ 18 января 2020

Как создать конструктор, который принимает параметр массива и инициализировать значения в базовом массиве в 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 никогда не инициализировалось после передачи arr через myClass конструктор.

Я пробовал несколько комбинаций в конструкторе MyClass, но не смог успешно инициализировать базовый массив myArray.

Ответы [ 3 ]

2 голосов
/ 18 января 2020

Код работает, но в вашем случае нет необходимости в дженериках

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();
}}
0 голосов
/ 18 января 2020

Спасибо всем, причина, по которой мой код не работал, была из-за дополнительной переменной size, которую я не установил (не включил во фрагмент) как часть инициализации конструктора. Это объясняет исключение indexOutOfBounds, которое я получил, поскольку size всегда было 0.

Извинения за вопрос с неполной информацией. Код работает нормально во фрагменте выше. Заслужил понижение. Еще раз спасибо.

0 голосов
/ 18 января 2020

Код работает просто отлично. Проверьте свой 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();
}
...