Полезно ли включать ключевое слово this в метод класса? - PullRequest
1 голос
/ 17 октября 2019

Например, у меня есть метод, который отображает информацию об экземпляре Employee

//Displaying the instance of the object information in a anesthetically pleasing manner
public void display() {
    System.out.println("Employee Information");
    seperationLine();
    System.out.println("Name: " + getName());
    seperationLine();
    System.out.println("PPS number: " + getPpsNum());
    seperationLine();
    System.out.println("Salary: " + getSalary());

}

Должен ли я использовать ключевое слово this в методе и других методах, которые должны использовать атрибут или это так? не обязательно

//Displaying the instance of the object information in a anesthetically pleasing manner
public void display() {
    System.out.println("Employee Information");
    seperationLine();
    System.out.println("Name: " + this.getName());
    seperationLine();
    System.out.println("PPS number: " + this.getPpsNum());
    seperationLine();
    System.out.println("Salary: " + this.getSalary());

}

Ответы [ 4 ]

2 голосов
/ 17 октября 2019

Это действительно больше вопрос стиля.

Раньше редакторы не были достаточно умны, чтобы понять: это поля класса, поэтому они могли / должны быть выделены другим цветом (по сравнению с локальными переменными).

Но в наши дни даже маленькие редакторы понимают такие вещи. Поэтому вы не получаете много пользы от this в местах, где его не требуется использовать. Итак, я рекомендую: записывать this только тогда, когда вам нужно .

Помимо этого, реальная проблема здесь: не пишите такие display() методы. Практика реального мира: @ Переопределите метод toString(), и он вернет значимое представление вашего класса.

Затем, когда вы намереваетесь зарегистрировать или отобразить экземпляр вашего класса,Вы вызываете employee.toString() ... и используете возвращаемую строку так, как вам нравится.

Значение: очень плохая идея выводить на консоль. Что если вы захотите, например, записать материал в файл позже?!

0 голосов
/ 17 октября 2019

Лучшей практикой является переопределение метода toString в вашем классе. Это очень просто, и я сомневался, является ли это правильным ответом или это должен быть комментарий.

Итак, каждый класс является объектом, и существует метод String toString(). Метод TH возвращает строковое представление каждого экземпляра некоторого объекта.

Например:

Если вы напишите toString метод в своем определении класса, он переопределит toString метод объекта.

@Override
String toString(){
    return (name
           + "\n"
           + surname);
}

После этого вы всегда получите атрибуты name (новая строка) * surname для каждого экземпляра вашего Объекта. (если имя и фамилия существуют)

Вот простой класс, где вы можете найти, где вы должны использовать this ключевое слово ...

public class JoJo {

    private String name;
    private String surname;

    public static void main(String[] args) {

        JoJo jojo = new JoJo();
        jojo.setName("Blah");
        jojo.setSurname("Abracadabra");

        System.out.println(jojo);
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the surname
     */
    public String getSurname() {
        return surname;
    }

    /**
     * @param surname the surname to set
     */
    public void setSurname(String surname) {
        this.surname = surname;
    }

    @Override
    public String toString(){
        return (
                name
                + ("\n")
                + surname
                );
    }

}
0 голосов
/ 17 октября 2019

В указанном вами коде нет необходимости использовать ключевое слово this. Однако вы должны использовать ключевое слово this, если в вашем контексте есть два конфликтующих имени, и вы хотите сослаться на члена класса, потому что this возвращает ссылку на текущий объект. Например, предположим, что у вас есть

class Employee
{
    int age;
    int _salary;

    public void setAge(int age)
    {
        this.age = age; //You need this.age in order to differentiate it from the int age parameter of the method.
    }

    public void setSalary(int salary)
    {
        _salary = salary; //No need for this._salary, it's redundant since names don't conflict with each other.
    }
}

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

0 голосов
/ 17 октября 2019

До тех пор, пока «this» является экземпляром этого конкретного класса, все же это хорошая практика для принятия. В противном случае вы должны первоначально объявить объект, чтобы применить методы. Вы также можете использовать новый ClassName (). Method () на ходу. Всего наилучшего!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...