"Bună, Amigo!"
„Un alt subiect mic sunt cursurile locale .”
„După cum ați văzut, puteți crea clase nu numai în fișiere separate, ci și în interiorul altor clase. Dar asta nu este tot. Clasele pot fi create și în cadrul metodelor. Aceste clase se numesc clase locale. Ele funcționează ca clasele interioare obișnuite, dar pot fi utilizate în cadrul metodelor în care sunt declarate.”
"Priveste la ecran:"
class Car
{
public ArrayListcreatePoliceCars(int count)
{
ArrayList result = new ArrayList();
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;
}
}
— Și de ce avem nevoie de astfel de cursuri?
„Punerea unei clase, cu toți constructorii și metodele ei, în interiorul unei metode nu face un cod foarte lizibil, nu crezi?”
— Exact. Ai perfectă dreptate.
„Puteți folosi și clase interne anonime în cadrul metodelor. Dar aceste clase au un mic avantaj și, în consecință, sunt folosite în cadrul metodelor destul de des.”
„O clasă declarată într-o metodă poate folosi variabilele locale ale acelei metode:”
class Car
{
public ArrayListcreatePoliceCars(int count)
{
ArrayList result = new ArrayList();
for(int i = 0; i < count; i++)
{
final int number = i;
result.add(new Car()
{
int policeNumber = number;
});
}
return result;
}
}
„Dar există o limită: variabilele sunt „numai în citire” – nu pot fi modificate.”
„Iată de ce există această restricție:”
„Clasele declarate într-o metodă pot accesa doar variabilele unei metode care sunt declarate folosind cuvântul cheie final. În exemplul de mai sus, puteți vedea că nu pot atribui imediat valoarea lui i la policeNumber. În schimb, o salvez mai întâi în numărul variabil final.”
„A fi capabil să folosești variabilele unei metode este super tare. Sper să apreciez în mod corespunzător. Păcat că nu poți schimba variabilele.”
"Ellie îți va explica astăzi de ce nu le poți schimba. Între timp, mă duc să trag un pui de somn pentru aproximativ o oră."
— Noapte bună, Kim. Mulțumesc pentru lecția interesantă.
GO TO FULL VERSION