Не получается передать объекты в массив

103
07 апреля 2021, 01:20

Почему нельзя передать объекты в массив подобным образом?

public class elem {
    private int num;
}
public class mas {
    public elem[] elemMas = new elem[3];
}
public class process {
    mas mOne = new mas();
    elem eOne = new elem();
    elem eTwo = new elem();
    elem eThree = new elem();
    mOne.elemMas[0] = eOne;
    mOne.elemMas[1] = eTwo;
    mOne.elemMas[2] = eThree;
}
public class main {
    public static void main(String[] args) {
        process pOne = new process();
    }
}

В классе process компилятор ругается следующим образом:

process.java:6: error: ']' expected
  mOne.elemMas[0] = eOne;
               ^
process.java:6: error: ';' expected
  mOne.elemMas[0] = eOne;
                ^
process.java:6: error: illegal start of type
  mOne.elemMas[0] = eOne;
                  ^
Answer 1

Вы присваиваете значения элементам массива в теле класса. В теле класса переменные могут только объявляться.

То, что вы хотите сделать, можно реализовать двумя способами:

1) С помощью блока инициализации:

public class process {
    mas mOne = new mas();
    elem eOne = new elem();
    elem eTwo = new elem();
    elem eThree = new elem();
    {
        mOne.elemMas[0] = eOne;
        mOne.elemMas[1] = eTwo;
        mOne.elemMas[2] = eThree;
    }
}

2) С помощью конструктора:

public class process {
    mas mOne = new mas();
    elem eOne = new elem();
    elem eTwo = new elem();
    elem eThree = new elem();
    process() {
        mOne.elemMas[0] = eOne;
        mOne.elemMas[1] = eTwo;
        mOne.elemMas[2] = eThree;
    }
}

Кстати, имена классов стоит писать с заглавной буквы.

Answer 2

В теле класса не разрешены операции записи в массив, можно сделать это в конструкторе:

public class process {
  mas mOne = new mas();
  public process() {
    elem eOne = new elem();
    elem eTwo = new elem();
    elem eThree = new elem(); 
    mOne.elemMas[0] = eOne;
    mOne.elemMas[1] = eTwo;
    mOne.elemMas[2] = eThree;
  }
}
Answer 3

может Вы хотели вот это: ,т.е. вернуть неизменяемый класс, с точно финально определенными экземплярами Elem в массиве?

public class mmm {
    public static void main(String[] args) {
        Process pOne = Process.getInstance();
        System.err.println("доступ к массиву например к length" + pOne.getMas().elemMas.length);
        for (int i=0; i<pOne.getMas().elemMas.length; i++){
            System.out.println("класс в массиве : " + i);
            System.out.println(Arrays.toString(pOne.getMas().elemMas));
        }
    }
}
class Elem{
    private int num;
    public Elem(int num) {
        this.num = num;
    }
    @Override
    public String toString() {
        return "Elem{" +
                "num=" + num +
                '}';
    }
}
class Mas{
    public Elem[] elemMas = new Elem[3];
    {
        Elem eOne = new Elem(1);
        Elem eTwo = new Elem(2);
        Elem eThree = new Elem(3);
        elemMas[0]=eOne;
        elemMas[1]=eTwo;
        elemMas[2]=eThree;
    }
}
class Process{
    private static Process process = new Process();
    private Mas mas;
    public Mas getMas() {
        return mas;
    }
    public static Process getInstance(){
        process.mas = new Mas();
        return process;
    }
}
READ ALSO
Разница между Collections.sort() и сортировкой стримом

Разница между Collections.sort() и сортировкой стримом

Я пишу программу, которая выстраивает пирамиду из отсортированных чисел и возвращает двумерный массив

107
Room Database сложный фильтр для выборки

Room Database сложный фильтр для выборки

Всем привет! Ищу помощь у тех, кто сталкивался с подобной задачей или у тех, кто знает, как ее решить

175
Обновление данных в RecyclerView с помощью RecyclerView.OnScrollListener

Обновление данных в RecyclerView с помощью RecyclerView.OnScrollListener

Проблема в том, что при выполнение нового запроса на сервер после прокручивания у меня список полностью обновляется, необходимо, чтобы он добавлялся...

120
Как именно работает метод read() у InputStream?

Как именно работает метод read() у InputStream?

Как же все-таки устроена работа метода read():

117