#java #constructor #documentation #comments #default-constructor
#java #конструктор #Документация #Комментарии #default-constructor
Вопрос:
В моем классе Java basic мой учитель сказал мне комментировать любой произвольный выбор, который я делаю, когда я пишу конструктор по умолчанию для класса. (Она сказала нам, что мы должны создавать конструктор по умолчанию для каждого класса, который мы разрабатываем) Итак, например, я пишу класс с именем RoomDimension, и я создал конструктор по умолчанию следующим образом:
public class RoomDimension {
//Fields
private double length; //Length of a carpet
private double width; //Width of a carpet
/**
*
*/
public RoomDimension(){
length = 0.0;
width = 0.0;
}
Я использую здесь 0.0 в качестве своего флага, чтобы указать, что пользователь ничего не ввел или ввел неверный ввод. Должен ли я затем прокомментировать тот факт, что 0.0 используется как указание на недопустимый ввод в комментарии к документации (/** /)? Я знаю, что если бы я использовал -1 в качестве своего флага (или инициализации поля в конструкторе по умолчанию), я бы определенно прокомментировал, что -1 указывает на недопустимый ввод, потому что я принял это решение произвольно. Я спрашиваю, нужно ли комментировать 0 или нет, потому что я не знаю, является ли 0 произвольным выбором или нет. Не могли бы вы, как программист, потрудиться указать это? Или, это нормально, если я просто предположу, что пользователь знает это, не сообщая им?
Комментарии:
1. «Она сказала нам, что мы должны создавать конструктор по умолчанию для каждого класса, который мы разрабатываем» Я не могу в это поверить! Вы, учитель, должны знать, что конструктор по умолчанию создается компилятором для классов, в которых конструктор явно не написан. Также сам ваш пример показывает, почему конструктор по умолчанию для того, чтобы просто иметь один , является злом: вы никогда не знаете, допустимы ли значения в свойствах. По крайней мере, вы должны проверять каждый раз, когда обращаетесь к ним.
Ответ №1:
Что касается того, следует ли комментировать ноль, я думаю, было бы лучше указать, что это флаг, чтобы напомнить себе в будущем или любому другому программисту, который просматривает ваш код.
Что касается использования нуля в качестве флага, я думаю, было бы лучшей практикой генерировать исключение, когда длина и высота меньше или равны нулю. В будущем его будет легче читать и эффективнее обрабатывать, когда пользователь вводит неположительное число.
Ответ №2:
Она сказала нам, что мы должны создавать конструктор по умолчанию для каждого класса, который мы разрабатываем
И я сказал за своего учителя: кто не знает, тот учит, кто знает, тот делает!
Если вы не создадите конструктор по умолчанию, это сделает компилятор, вы знали? — как насчет вашего учителя?
Многие инструменты, которые генерируют, преобразуют данные, будут плакать, ворчать, вылетать, если они не найдут СКОМПИЛИРОВАННЫЙ «конструктор по умолчанию». Но они будут полностью игнорировать комментарии.
Итак, вернемся к вашему классу:
public class RoomDimension {
static {
System.out.println("I an a static initializer, If the classloader will touch your class, I will be called first! ex. RoomDimension.anyStaticmethod() or before new RoomDimension()");
}
{
System.out.println("I am instance initializer. whenever you call any constructor, I will run before the constructor body, try me with: new RoomDimension()");
}
//Fields
private double length; //Length of a carpet
private double width; //Width of a carpet
public RoomDimension() {
length = 0.0;
width = 0.0;
}
}
Кстати, в вашем коде:
public RoomDimension() {
length = 0.0;
width = 0.0;
}
это совершенно бесполезно, потому что перед constructor это будет инициализация, и это будет делать точно то же самое, потому что вы объявили свойства as, и они будут инициализированы перед constructor:
private double length; //Length of a carpet
private double width; //Width of a carpet
Если вы хотите знать, инициализирован он или нет, используйте Double
вместо double
и проверьте null
значение.
Пример:
private Double length; //Length of a carpet
private Double width; //Width of a carpet
Комментарии:
1. Спасибо за ваш ответ. Я спросил ее, можно ли исключить конструктор по умолчанию, потому что в моем учебнике указывалось, что компилятор java предоставит его мне, если у меня его нет, и она сказала, что компилятор сделает это за меня, только если в моем классе нет другого конструктора. Это правда? Должен ли я тогда создать его просто по привычке?
Ответ №3:
Я бы установил для них значения, которые можно обнулить.
public class RoomDimension
{
private double? length;
private double? width;
}
public RoomDimension()
{
}
Что это делает для вас, так это позволяет значениям length и width принимать значение null. Поэтому, когда вы вызываете конструктор по умолчанию, им автоматически присваивается значение null.
Это поможет вам начать думать в терминах объектов, потому что, когда у вас есть объекты, которые содержат другие объекты, вы не можете присвоить всем содержащимся объектам значение 0.0, вы просто создаете нулевой объект. Также, когда вы выполняете действия над этим объектом, вы просто проверяете, является ли его значение null заранее, это помогает избежать исключений с нулевой ссылкой.
Комментарии:
1. Это не
C#
вопрос.2. Извините, что изменил double? чтобы удвоить, вы находитесь в java