Как передать массив объектов методу

#java

#ява

Вопрос:

У меня есть метод , вызываемый как getStrategy внутри класса , и он ожидает массив , как показано .

 public static String getStrategy(Hand[] Hand)
{

}
  

А это мой Ручной Предмет

 public class Hand
{
  public char side;
}
  

Обращаясь к моему клиенту, пожалуйста, скажите мне, как я могу передать этот метод getStrategy??

Я уже пробовал это

 Hand[] HandArray = new Hand[1];

HandArray.side = 's';

MyClassUtil.getStrategy(HandArray);
  

Пожалуйста, скажите мне, правильно ли это или нет??

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

1. HandArray.side = 's'; : Ваш компилятор уже скажет вам, что это неправильно. Пожалуйста, включайте любые сообщения об ошибках компилятора в эту или любые будущие публикации. Эти сообщения обычно очень информативны, и вам захочется научиться их понимать. Мы можем помочь.

2. Просто подумайте об этом логически — есть ли у самого массива side поле?

3. вам нужно объявить конструктор в вашем классе hand, чтобы вы могли сделать что-то вроде HandArray[0] = new Hand('s'); , и этот параметр инициализирует боковую переменную.

4. Кроме того, замените public static String getStrategy(Hand[] Hand) на public static String getStrategy(Hand[] hand)

5. @Eng в чем разница? 🙂

Ответ №1:

Ну, все, кроме средней строки, в порядке (кроме именования). В настоящее время ваша средняя строка пытается получить доступ к массиву, как если бы это был один объект. Вы, вероятно, хотите что-то вроде:

 Hand[] hands = new Hand[1];
Hand hand = new Hand();
hand.side = 's';

hands[0] = hand;
MyClassUtil.getStrategy(hands);
  

Я бы также настоятельно рекомендовал не использовать общедоступные поля…

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

1. В последнем заявлении @Jon Skeet он ссылается на поле char ‘size’. Обычно гораздо более уместно использовать protected здесь таким образом, поскольку они, скорее всего, являются частью одного и того же пространства имен. Если вам нужен public, создайте закрытую переменную _size и используйте size в качестве модификатора public, определив ее как private char _size; protected char size {public get { return _size; }, установите{_size = value}}.

2. В качестве альтернативы side можно было бы сделать public final , если бы его не нужно было переустанавливать. Конечно, это было бы возможно только в том случае, если Hand конструктор принял char в качестве аргумента.

3. @KublaiKhan: Это все равно означало бы раскрытие деталей реализации (поле). Обычно я бы предоставлял только истинные константы ( public static final поля неизменяемых типов) в качестве переменных.

4. @JonSkeet — Интересный момент о раскрытии деталей реализации — хорошо воспринято.