Mitä tarkalleen tämän virheilmoituksen mukaan pitäisi tehdä? Ilmoitus tulee kun kutsutaan paketissa olevaa luokan metodia.
local variable sulje is accessed from within inner class; needs to be declared final.
sulje.closedConnection();
local variable sulje is accessed from within inner class; needs to be declared final.
sulje.closedConnection();
Vastaukset 3
Vanhimmat
siis muuttujaa "sulje" käsitellään luokassa olevan sisäisen luokan koodissa. Java haluaa tämän muuttujan olevan "final" muotoinen, ettei sitä enää aliluokassa muutettais.
private final Tyyppi sulje = new Tyyppi();
eli sulla on jotain
public class Keke
{
public Tyyppi sulje = new Tyyppi();
//jonka sisällä on toinen luokka
__________public class Tane
__________{
_______________sulje.closeConnecton();
__________}
}
Eli sulje-muuttujaa ei sais muuttaa siäisen luokan sisällä, eli pääluokassa se pitää määritellä final-tyyppiseksi.
Final:in lisääminen olion eteen korjasi virheen. Kiitos!
Local inner classes may only make reference to local variables if they are final. Eli olisikohan kyseessä ollut local tai anonymous inner class. Tavallisessa inner class'issa saa tehdä viittauksen "pääluokan" jäseniin, vaikkei ne olisikaan final, ja ymmärtääkseni kirjoittamassasi esimerkissä tilanne oli juuri tämä. Local ja anonymous inner class'ista saa tehdää viittauksen "pääluokan" muuttujiin vain jos ne on final ja initialisoitu. Anteeksi huonon suomen ja vielä huonomman englannin sekasotku. Olen vain vähälahjainen koodaaja.