Вопрос-ответ

What is variable shadowing used for in a Java class?

Для чего используется затенение переменных в классе Java?

Я читаю свою книгу Deitel "Java Как программировать" и наткнулся на термин "затенение". Если затенение разрешено, в какой ситуации или с какой целью оно используется в классе Java?

Пример:

public class Foo {

int x = 5;

public void useField() {
System.out.println(this.x);
}
public void useLocal() {
int x = 10;
System.out.println(x);
}
}
Переведено автоматически
Ответ 1

Основная цель затенения - отделить локальный код от окружающего класса. Если он недоступен, рассмотрим следующий случай.

Выпущен класс Foo в API. В вашем коде вы создаете его подкласс, а в вашем подклассе используете переменную с именем bar . Затем Foo выпускает обновление и добавляет в свой класс защищенную переменную с именем Bar.

Теперь ваш класс не будет запускаться из-за конфликта, который вы не могли предвидеть.

Однако не делайте этого специально. Позволяйте этому происходить только тогда, когда вам действительно наплевать на то, что происходит за пределами области видимости.

Ответ 2

Это может быть полезно для установщиков, где вы не хотите создавать отдельное имя переменной только для параметра метода, например:

public void setX(int x) {
this.x = x;
}

Кроме того, я бы избегал их.

Ответ 3

Одна из основных целей - запутать людей. Это плохая практика, и ее следует избегать.

Ответ 4

Затенение на самом деле используется не только в Java. В любом случае, когда переменная, объявленная в области видимости, имеет то же имя, что и переменная в большей области видимости, эта переменная затеняется.

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

Однако, если вы можете избежать этого, вам следует это сделать, поскольку это может вызвать путаницу.

java