Я знаю он возвращает ссылку на текущий объект, и с его помощью можно разрешить конфликт локальных и глобальных имен, например в конструкторе. Но какие есть более практичные применения?
В общем применение оператора this можно обобщить до следующего:
К примерам. Использование this в конструкторе:
class Person{
String name;
int old;
int id;
Person(String name, int old){
this.name = name;//Здесь мы получаем доступ к не статичному полю класса
this.old = old; // Здесь мы получаем доступ полю класса
}
}
Пример вызова конструктора из конструктора:
Person (String name, int old, int id){
this(name, old);
this.id = id;
}
Здесь мы получаем доступ к не статичному полям класса. В методах типа equals ():
@Override
public boolean equals(Object obj) {
if(obj == null) return false;
Person other = (Person) obj;
if(this.old == other.old && this.name.equals(other.name))
return true;
return false;
}
Для создания потока:
class MyThread implements Runnable{
String name;
Thread t;
public MyThread(String name){
this.name = name;
t=new Thread(this); /* Здесь мы передаем экземпляр класса,
в котором будут разворачиваются действо. */
t.setName(name);
t.start();
}
public void run(){
for (int i = 0; i < 5; i++) {
System.out.println(name+": "+i);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
System.out.println(e);
return;
}
}
}
}
Для получения аннотаций:
Annotation [] getAnnotation (){
return this.getClass().getAnnotations();
}
И множество других примеров использования.
Например паттерн Builder почти во всех методах для возврата того же объекта использует везде this.
Например, когда внутри метода текущего объекта класса нужно передать текущий объект (this
) в метод другого класса.
Пример:
class Example {
public static void main (String[] args) throws java.lang.Exception {
Point p = new Point();
p.moveTo(1, 1);
System.out.println(p); // 1x1
Utils.plus(p, 2, -1);
System.out.println(p); // 3x0
}
}
class Point {
int x;
int y;
public void moveTo(int x, int y) {
Utils.plus(this, x, y);
}
public String toString() {
return String.format("%sx%s", x, y);
}
}
class Utils {
public static void plus(Point p1, int x, int y) {
p1.x += x;
p1.y += y;
}
}
Доступ к начинке внутренних нестатических классов: Vehicle.this.run();...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В FullComparator не работает сортировка по нескольким полям (channelName, DateCreated (в обратном порядке) и Fingerprint)Сортирует только по первому
Как получить из этой строки 2018-07-11T09:54:40660 +0000 обьект Date?
Тестирую отправку сообщений с помощью JavaMailSender, который запускается из ExecutorService с помощью submit, все работает отлично, но в тестах GreenMail не получает...
Цикл: for (j = 2; j < i; j++), в чем заключается j<iКак это понять? Откуда мы придумали j?