Хороших відповідей є багато, але є ще одна дуже незначна причина this
скрізь. Якщо ви спробували відкрити свої вихідні коди у звичайному текстовому редакторі (наприклад, блокнот тощо), використання this
це зробить його набагато зрозумілішим для читання.
Уявіть собі це:
public class Hello {
private String foo;
// Some 10k lines of codes
private String getStringFromSomewhere() {
// ....
}
// More codes
public class World {
private String bar;
// Another 10k lines of codes
public void doSomething() {
// More codes
foo = "FOO";
// More codes
String s = getStringFromSomewhere();
// More codes
bar = s;
}
}
}
Це дуже зрозуміло для читання з будь-яким сучасним IDE, але це буде загальним кошмаром для читання із звичайним текстовим редактором.
Ви будете боротися, щоб дізнатись, де foo
знаходиться, поки не скористаєтесь функцією редактора «знайти». Тоді ви будете кричати на getStringFromSomewhere()
ту ж причину. Нарешті, після того як ви забули, що s
таке, bar = s
це завдасть вам остаточного удару.
Порівняйте це з цим:
public void doSomething() {
// More codes
Hello.this.foo = "FOO";
// More codes
String s = Hello.this.getStringFromSomewhere();
// More codes
this.bar = s;
}
- Ви знаєте
foo
, це змінна заявлена у зовнішньому класі Hello
.
- Ви знаєте
getStringFromSomewhere()
, це метод, оголошений і в зовнішньому класі.
- Ви знаєте, що
bar
належить до World
класу, іs
є локальною змінною, оголошеною в цьому методі.
Звичайно, щоразу, коли щось розробляєш, ти створюєш правила. Таким чином , при розробці вашого API або проекту, якщо ваші правила включають в себе «якщо хто - то відкриває всі ці вихідні коди з блокнотом, він повинен застрелити його / себе в голові» , то ви абсолютно нормально , щоб не робити цього .