Есть ли способ изменить объект, к которому относится это ключевое слово? - PullRequest
2 голосов
/ 18 мая 2011

Мне было интересно, есть ли способ сделать то, что говорится в названии. В качестве примера у меня есть код ниже:

public List<Shape> path() {
    List<Shape> path = new ArrayList<Shape>();
    path.add(0, this);
    while (this.parent != null) {
        path.add(0, this.parent);
        this = this.parent;
    }
    return path;
}

Я хочу найти законный способ сделать this = this.parent, чтобы я мог продолжать добавлять parents к списку массивов, пока не останется больше родителей. Возможно ли это?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 18 мая 2011

Нет, это невозможно. this привязан к текущему объекту, но никто не мешает вам использовать другие ссылочные имена, такие как currentNode или что-то еще, что вы сначала инициализируете как this (currentNode = this), а затем присваиваете ему родительские имена: currentNode = currentNode.parent.

2 голосов
/ 18 мая 2011

Вы можете изменить состояние объекта, на который ссылаются this,

Но вы не можете this указать на какой-либо другой объект,

this - этоfinal

Для вашего случая вы можете создать локальную ссылку и работать с ней

1 голос
/ 18 мая 2011

Присваивание this переменной правильного типа перед while и использование этой переменной.

public List<Shape> path() {
    List<Shape> path = new ArrayList<Shape>();
    path.add(0, this);

    SomeVar node = this;

    while (node.parent != null) {
      path.add(0, node.parent);
      node = node.parent;
    }
   return path;
} 
...