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

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

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

Мои вопросы:

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

Да, это позволяет избежать столкновения имен. В контексте конструктора имя`name` относится к параметру и имени`this.name` ссылается на поле экземпляра.Зависит от того, что вы подразумеваете под «лучше». Лично я бы сделал`name` а также`number` поля final, поэтому класс неизменен. По моему опыту, лучше начать с неизменного определения класса и двигаться к чему-то изменчивому только в том случае, если есть законная необходимость в этом.

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

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



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

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

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

Я бы сделал:

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

```


`this.` избегает проблем. Некоторые люди рекомендуют этот способ, например, Rogue Wave в своей книге.[Элементы стиля Java](http://books.google.com/books?id=Z2CKvVZjPPEC&lpg=PP1&ots=8W-lUxxpaX&dq=elements%20of%20java%20style&pg=PA27#v=onepage&q=qualify%20field%20variables&f=false).

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

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

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

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



Да,`this` различает переменную экземпляра и переменную параметра метода с тем же именем.Всегда есть спор о том, лучше ли инициализация конструктора или сеттера. Если вы собираетесь установить имя и номер только при первом создании объекта, и вам не нужно будет обновлять эти переменные позже, возможно, лучше использовать конструктор и пропустить сеттеры. И да, в сеттере, вам нужно использовать`this` если ваш параметр имеет то же имя, что и поле, которое вы хотите установить.

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

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