Ko te je to slagao Možeš slobodno da koristiš i parametre koji nisu final. Evo jednostavnog primera:
public class Main {
public static void main(String[] args) {
System.out.println(String.valueOf(calc(1, 2)));
}
public static int calc(int x, int y) {
class Operation {
public int add(int z) {
return x + y + z;
}
}
Operation op = new Operation();
return op.add(5);
}
}
Ono što ne smeš da radiš je da menjaš parametre koje funkcija dobije, a koristiš ih direktno u lokalnoj klasi jer se ona u suštini ponaša kao closure i skoro sva pravila koja važe za njih važe i za lokalne klase. Ako zaista imaš potrebu da menjaš ulazne parametre (što je uglavnom loša praksa), onda lokalni klasu možeš da prepišeš tako da umesto ulaznih parametara funkcije, zahteva njihovu kopiju u svojim funkcijama. Na primer ovako:
public class Main {
public static void main(String[] args) {
System.out.println(String.valueOf(calc(1, 2)));
}
public static int calc(int x, int y) {
class Operation {
public int add(int x, int y, int z) {
return x + y + z;
}
}
x++;
y--;
Operation op = new Operation();
return op.add(x, y, 5);
}
}
|