this при объявлении конструктора Java

243
17 апреля 2017, 03:43

Есть два варианта объявления конструктора:

public class MyClass() {
    int a, b, c;
        MyClass (int a, int b, int c) {
            this.a=a;
            this.b=b;
            this.c=c;
        }
}

или

public class MyClass() {
    int a, b, c;
        MyClass (int x, int y, int z) {
            a=x;
            b=y;
            c=z;
        }
}

Мне, как новичку, вариант с this кажется более наглядным, но какая форма записи предпочтительнее и более профессиональна? И есть ли какие-либо подводные камни при использовании this таким способом?

Answer 1

Первая форма встречается почти везде. Вторая форма записи встречается редко.

Смысл в том, что необходимо именовать переменные осмысленно, то есть, если у нас должно быть поле класса, хранящее количество студентов, то это поле логично назвать numberOfStudents. Естественно, создавая конструктор и передавая в него аргументы, логично, что параметр тоже следует назвать numberOfStudents, чтобы Вы или Ваши коллеги, используя этот класс, понимали ЧТО они передают в конструктор.

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

"Подводных камней" при инициализации, что одним, что другим способом, нет.

Answer 2

Первый вариант будет более правильный, потому что имена параметров доступны из другого класса. Если в классе у вас есть свойство count, а в параметре оно указано как v, то человек, который будет пользоваться этим классом может не понять, что ему нужно передавать. Этим человеком можете оказаться и вы, если проект ведется долго и он достаточно большой

READ ALSO
Jackson не распознается

Jackson не распознается

Хочу попробовать поработать с Jackson так как много слышал, вот открыл в IntelliJ IDEA, открыл вот этот туториал

193
Java SE Look&Feel не может найти класс Nimbus

Java SE Look&Feel не может найти класс Nimbus

Пользуюсь NetBeans 81 Java 1

192
Как синхронизировать две TextView

Как синхронизировать две TextView

Имеются 2 TextView: inText и outTextВ inText пишу строку, и он должен сразу же появиться в outText

191
WPARAM и LPARAM в JNA SendMessage

WPARAM и LPARAM в JNA SendMessage

Пытаюсь в winAPI на java (да, да, странная нужда, блаблабла

226