Может кто-нибудь объяснить конструкторы на Java? - PullRequest
1 голос
/ 10 марта 2010

Я изучаю Java, читая онлайн-книгу по Java, но мне трудно понять «конструкторов». Мой вопрос заключается в том, как мне написать конструктор, который устанавливает частные поля класса для полученных значений?

Я пытался это сделать, но не думаю, что это правильно:

public Biscuit(String id, String Biscuitname, int numOfBiscuits);

Так что, если у меня есть пример "12002 пищеварительный 83", мне нужен конструктор, который устанавливает частные поля класса в эти значения, полученные

надеюсь, что это имеет смысл

Ответы [ 3 ]

15 голосов
/ 10 марта 2010

Вот, пожалуйста:

public class Biscuit
{
    private final String id;
    private final String name;
    private final int count;

    public Biscuit(String id, String name, int count)
    {
        this.id = id;
        this.name = name;
        this.count = count;
    }

    // Other code
}

Некоторые заметки:

  • Поскольку параметры и поля имеют одно и то же имя, мне пришлось использовать this.foo = foo в конструкторе. Некоторые люди избегают использовать одни и те же имена для параметров и полей, но я лично не вижу проблемы с этим.
  • Я сделал поля final и private; поля почти всегда должны быть закрытыми IMO и, по возможности, конечными - если вы можете сделать весь тип неизменяемым, тем лучше. (Это приводит к более функциональному стилю программирования, который легче рассуждать и тестировать.)
  • Я изменил имена параметров - имя будет именем печенья, поэтому нет необходимости указывать это в имени параметра, и аналогично numOfBiscuits явно связано с печеньем.

Имеет ли все это смысл? Задавайте больше вопросов, если они у вас есть!

3 голосов
/ 10 марта 2010

Ваша попытка хороша, но не имеет реализации. Вместо точки с запятой вы должны написать присваивания свойствам, разделенным точкой с запятой в фигурных скобках.

1 голос
/ 10 марта 2010

Просто установите поля в теле конструктора. Если имена аргументов в конструкторе совпадают с именами полей в классе, то вам нужно добавить префикс имени класса к this., чтобы «устранить его неоднозначность» - как я сделал с полем «id» ниже:

class Biscuit {
   private String id;
   private String biscuitname;
   private int numOfBiscuits;

   public Biscuit(String id, String name, String num) {
       this.id = id;
       biscuitname = name;
       numOfBiscuits = num;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...