Я согласен. Я только что упомянул различные стили, которые являются общими.

то очень простой вопрос, я никогда не кодировал в Java, но я пишу класс для друга ... Имея что-то вроде:

class myClass{

    private string name;
    public string getName() {
        return this.name;
    }   
    public void setName (int newValue) {
        this.name = newValue;
    }

    private int number;
    public int getNumber() {
        return this.number;
    }   
    public void setNumber (int newValue) {
        this.number = newValue;
    }
}  

Я думал о построении конструктора так:

public myClass (string name, int numbers) {
    this.name = name;
    this.number = number;
}

Мои вопросы:

Я использую те же идентификаторы для свойств, что и для параметров. Является ли это." избежать каких-либо проблем здесь?Лучше использовать методы набора и, если да, я должен использовать «это»?

большое спасибо

Ответы на вопрос(6)

this. явно устраняет неоднозначность, и программа будет вести себя как задумано.

В зависимости от вашей программы может быть полезно или не выгодно использовать сеттеры вместо прямой записи полей. Если вы записываете значения непосредственно в конструктор, то вы пропускаете любые проверки во время выполнения, которые могут иметься в ваших установщиках, что потенциально может привести к тому, что ваш объект будет содержать данные, которые он обычно не может. С другой стороны, если ваш установщик пытается что-то сделать со старым значением, то вы, вероятно, не хотите вызывать его, потому что в конструкторе может не быть значимого старого значения. Я бы сказал, что не лучше или хуже устанавливать поля в конструкторе, чем использовать сеттеры, если вы будете осторожны, чтобы не нарушить инварианты классов.

которое вы должны использоватьthis различать их. При конфликте имен локальный var или аргумент будет иметь приоритет над свойством.

По этой причине я не люблю иметь одно и то же имя для каждого, поскольку это может легко привести к ошибкам.

2) Я бы также использовал сеттеры из конструктора, потому что если когда-либо понадобится проверка или какая-либо другая операция над аргументом во время установки, вам нужно будет внести изменения только в одном месте. В противном случае это дублирование и нарушаетСУХОЙ (не повторяй себя) принцип.

Я бы сделал:

public myClass (string name, int number) {
    setName( name );
    setNumber( number );
}

this. избегает проблем. Некоторые люди рекомендуют этот способ, например, Rogue Wave в своей книге.Элементы стиля Java.

Другие распространенные способы борьбы с этим:

имена членов с префиксом "m" или "m_"

private string m_name;
private int m_number;
public myClass(string name, int number) {
    m_name = name;
    m_number = number;
}

называть параметры другим именем, обычно одной буквой или сокращенной версией имени члена

private string name;
private int number;
public myClass(string nam, int num) {
    name = nam;
    number = num;
}

Но я предпочитаю, как вы используете сейчас сthis.

 Mikel21 янв. 2011 г., 02:29
Я согласен. Я только что упомянул различные стили, которые являются общими.
 Alb21 янв. 2011 г., 02:05
Мне очень не нравится использование префиксов на полях. Вам не нужно загромождать имя поля тем, каким оно является. Я бы пошел на ваш второй подход.
Да,this различает переменную экземпляра и переменную параметра метода с тем же именем.Всегда есть спор о том, лучше ли инициализация конструктора или сеттера. Если вы собираетесь установить имя и номер только при первом создании объекта, и вам не нужно будет обновлять эти переменные позже, возможно, лучше использовать конструктор и пропустить сеттеры. И да, в сеттере, вам нужно использоватьthis если ваш параметр имеет то же имя, что и поле, которое вы хотите установить.
Решение Вопроса
Да, это позволяет избежать столкновения имен. В контексте конструктора имяname относится к параметру и имениthis.name ссылается на поле экземпляра.Зависит от того, что вы подразумеваете под «лучше». Лично я бы сделалname а такжеnumber поля final, поэтому класс неизменен. По моему опыту, лучше начать с неизменного определения класса и двигаться к чему-то изменчивому только в том случае, если есть законная необходимость в этом.
 Waldheinz21 янв. 2011 г., 01:36
+1 за предложение неизменных классов для начала

this Ключевое слово позволяет избежать проблем.

Если в методах get / set есть логика, вы должны использовать их вместо этого. В противном случае установка значений в конструкторе допустима.

Ваш ответ на вопрос