Объект, передающий себя в Java - PullRequest
0 голосов
/ 19 июня 2011

Я понял, как сделать так, чтобы объект передавался самому себе и обновлялся в нем.Я сделал это, передав ObjectA в ObjectB.Затем ObjectB изменяет поле в ObjectA.Начиная с основного метода: (и пропуская заголовки метода и тому подобное)

ObjA.changeField(Obj2)

В ObjectA

Obj2.callChangeMethod(this);

В ObjectB

Obj1.makeChange();

Что я запуталсяо том, почему я должен был передать "это" в строке 2 по сравнению с передачей ObjA?

Спасибо

Ответы [ 2 ]

1 голос
/ 19 июня 2011

Причина на самом деле очень проста: все это связано с scope переменных.

Вот слегка украшенная версия кода, который вы представили:

public static void main(String[] args) {
    ObjectA Obj1 = new ObjectA();
    ObjectB Obj2 = new ObjectB();

    Obj1.changeField(Obj2);
}

В этом коде следует обратить внимание на то, что Obj1 и Obj2 объявлены внутри метода main. Это означает, что они принадлежат основному методу и не могут использоваться за пределами main. Это то, что означает «сфера». Если переменная объявлена ​​внутри класса, только этот класс имеет к ней доступ. Если объявлено в методе, только этот метод может использовать его. То же самое относится к структурам цикла и любому другому типу блоков, которые вы можете себе представить. По сути, если переменная была объявлена ​​внутри пары {}, то она принадлежит этой паре {}.

Так что теперь, если вы посмотрите на ваш ObjectA класс, вы заметите, что он сидит сам по себе - он не был объявлен как часть main метода, так что он может ' t использовать переменную Obj1 - код ObjectA не знает, что Obj1 даже существует.

Именно поэтому вы должны использовать ключевое слово this. У вас нет доступа к Obj1, поэтому вам нужно использовать «переменную», к которой у вас есть доступ - в этом случае у вас есть this, которая всегда ссылается на текущий экземпляр класса.

Итак, хотя вы все еще используете тот же объект (созданный new ObjectA()), у вас просто есть разные переменные, которые ссылаются на этот объект, в зависимости от того, какой код вы просматриваете в данный момент. Правила области видимости становятся немного более сложными, но чем больше вы играете с Java, и чем больше вы понимаете классы по сравнению с экземплярами по сравнению со ссылками на экземпляры, тем легче становится их удобно использовать.

0 голосов
/ 19 июня 2011

Единственная ссылка, которую объект имеет на себя, - это ключевое слово this. В конечном счете, у объекта нет другого способа сослаться на себя.

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