
— Привет, Амиго!
Еще одна небольшая тема – это локальные классы.
Как ты уже видел, классы можно создавать не только в отдельных файлах, но и внутри других классов. Так вот, это еще не все. Классы можно создавать и внутри методов. Такие классы называются локальными. Они работают как обычные внутренние классы, но их можно использовать в пределах того метода, где их объявили.
Внимание на экран:
class Car {
public ArrayList<Car> createPoliceCars(int count) {
ArrayList<Car> result = new ArrayList<Car>();
class PoliceCar extends Car {
int policeNumber;
PoliceCar(int policeNumber) {
this.policeNumber = policeNumber;
}
}
for(int i=0; i<count; i++)
result.add(new PoliceCar(i));
return result;
}
}
— А зачем такие классы нужны?
Класс внутри метода, да еще с методами и конструкторами – это очень плохо читаемый код, разве не так?
— Именно так. Ты абсолютно прав.
В методах также можно использовать анонимные внутренние классы. Но есть одно маленькое преимущество у таких классов, из-за чего их довольно-таки часто используют внутри методов.
Класс, объявленный внутри метода, может использовать локальные переменные этого метода:
class Car {
public ArrayList<Car> createPoliceCars(int count) {
ArrayList<Car> result = new ArrayList<Car>();
for(int i=0; i<count; i++) {
final int number = i;
result.add(new Car() {
int policeNumber = number;
});
}
return result;
}
}
Но есть одно ограничение – переменные можно только «читать», изменять их нельзя.
Поэтому классы, объявленные внутри метода, могут иметь доступ только к тем переменным метода, которые помечены ключевым словом final. В примере выше ты можешь видеть, что я не могу сразу присвоить переменной policeNumber значение переменной i, а сначала сохраняю его в final-переменную number.
— То, что можно использовать переменные метода – это действительно классная штука. Надеюсь, я оценю ее по достоинству. Плохо только, что нельзя менять переменные.
— Почему их нельзя менять, тебе сегодня расскажет Элли, а я пойду пока часок вздремну.
— Спокойной ночи, Ким. Спасибо за интересный урок.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ