#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 — Интересный момент о раскрытии деталей реализации — хорошо воспринято.