Какой тип параметра использовать в Java / преобразование между коллекцией и массивом объектов?

#java

#java

Вопрос:

Я выполняю школьное задание, в котором мне нужно передать массив в метод. Объявление массива выглядит следующим образом:

   static Object[] myArray = new String[8];
  

Он вызывается здесь (Proj04Runner — это класс, который нам предлагается создать для назначения):

    Proj04Runner runner = new Proj04Runner();
   myArray = runner.runA(myArray);
  

Я попытался создать метод в моем классе Proj04Runner с именем runA, но я продолжаю получать сообщения об ошибках. Я пробовал:

    Collection runA(Object[] myArray){
  

и

    Collection runA(Collection myArray){
  

но оба раза получаю сообщения об ошибках. Сообщения об ошибках, соответственно:

    Proj04.java:60: error: incompatible types: Collection cannot be converted to Object[]

   Proj04.java:60: error: incompatible types: Object[] cannot be converted to Collection
  

Что я делаю не так?

Комментарии:

1. Итак, ваш инструктор дал вам static Object[] myArray = new String[8]; ? Если да, то это довольно странно. Это довольно страшная строка кода.

2. Стив да, это код, который дал мне профессор. Он использует цикл для заполнения его строковыми значениями, но я все еще пытаюсь заставить его правильно перейти в мой метод.

3. Похоже, вам нужно реализовать Object[] runA(Object[] myArray) , но почему это не так, по крайней мере String[] runA(String[] myArray) , я не могу себе представить.

Ответ №1:

Вы пытаетесь присвоить результат обратно myArray . Вы не можете этого сделать. Потому что тип myArray is static Object[] . Вы исправляете это, определяя новую переменную для хранения результата. Нравится,

 Collection myCollection = runner.runA(myArray);
  

Примечание: использовать rawtypes в Java — плохая идея. Collection является универсальным типом. Это должно быть какое-то Collection<Type> . Кроме того, в Proj04Runner нем должно быть

 Collection runA(Object[] myArray) { // <-- takes an `Object[]`
  

Наконец, вы не показали много кода. Но вы работаете Proj04 (нет Proj04Runner ).

Комментарии:

1. Простите меня за недостаточное объяснение. Профессор дает нам файл для запуска с именем Proj04, который нам НЕ разрешено редактировать, и мы должны написать класс с именем Proj04Runner, который заставляет Proj04 выдавать определенный результат. Предполагается, что runA сортирует значения в myArray, который определен в Proj04. Я уверен, что это звучит запутанно, не имея всего этого перед вами… Но спасибо, что уточнили, что моим параметром должен быть массив объектов.

2. Да, когда задано Object[] myArray . Опять же, не видя задействованного кода, трудно ответить более конкретно. Вероятно, вам следует проконсультироваться со своим профессором.