Используя геттеры с этим. в Яве - PullRequest
0 голосов
/ 24 марта 2019

Я делаю проект для CS, и я только что понял, что я не понимаю механику, стоящую за этим.Ссылка на Java и геттеры.В частности, если у меня есть следующее:

class Circle{
   private int radius;
}

public Circle(int radius){
   this.radius = radius;
}

public int getRadius(){
   return radius;
}
  • Почему для конструктора я использую this.radius для ссылки на поле данных «радиус» в классе Circle, нодля конструктора у меня есть this.radius = radius?

  • Имеет ли значение, использую ли я это или нет.пока это единственное поле данных с именем radius?

  • Я только что проверил его на Sublime, и он выдает тот же результат.
    В соответствии с моей собственной логикой, не будет ли больше смысла использовать this.radius для возвратарадиус в getRadius() геттере вместо просто return radius, потому что я имею в виду поле данных в объекте Circle?

Я очень ценю всю помощь, которую я могу получить!

Ответы [ 3 ]

4 голосов
/ 24 марта 2019

Это потому, что radius - это имя параметра конструктора и поля класса. Для устранения неоднозначности используется ключевое слово this. В случае геттера this не нужен, но и не повредит. Некоторые форматеры добавляют this по умолчанию, это эквивалентно:

public int getRadius(){
    return this.radius;
}
2 голосов
/ 24 марта 2019

Вам не нужно this в конструкторе, если вы не shadow локальное имя.То есть с

public Circle(int r){
    this.radius = r;
}

Вы можете записать

public Circle(int r){
    radius = r;
}

this требуется только , когда используется для указания, какойradius Вы имеете в виду.

0 голосов
/ 24 марта 2019

На самом деле, когда вы ссылаетесь на this.radius, это означает, что вы используете переменную поля класса.В противном случае (в вашем коде) вы можете переназначить ваш radius в качестве аргумента в данном конструкторе, который может быть нежелательным в вашем случае.Чтобы отличить его, вы должны либо использовать другое имя переменной, либо использовать this.

...