22. marts 2005 - 16:59Der er
10 kommentarer og 1 løsning
Scope på variabler i sub-classes
Jeg har følgende kode, hvor jeg benytter variablen i, i begge classes, og derfor gerne vil gøre den global
public class Test2 { public static void main(String[] args) { Test j = new Test(); i=2; } }
class Test { byte i; public Test() { i=1; } }
Som det er nu, får jeg at vide at i cannot be resolved, og det får jeg at vide i Test2. Flytter jeg byte i; derop, får jeg samme fejl men for class Test. Flytter jeg i stedet class Test ind i Test2, altså således:
public class Test2 { byte i; public static void main(String[] args) { Test j = new Test(); i=2; } class Test { public Test() { i=1; } } }
får jeg en (for mig) meget mystisk fejlmeddelelse.
No enclosing instance of type Test2 is accessible. Must qualify the allocation with an enclosing instance of type Test2 (e.g. x.new A() where x is an instance of Test2)
Hvis jeg skal holde mig fra det, så smadrer du jo fuldstændigt det, jeg skrev, jeg havde lavet i mit forrige spørgsmål *g*
Det er ikke så meget fordi jeg vil referere til den samme variabel, det er mere fordi jeg gerne vil bruge det samme navn for 2 forskellige variabler (f.eks. til to for løkker), og i stedet for så at skulle deklarere dem i hver deres klasse synes jeg jo, det ville være smartere at deklarere variablen globalt :)
Her er et eksempel som skulle vise hvordan inner classes virker:
public class Outer { private int outerv; public Outer() { outerv = 123; } public void print() { System.out.println(outerv); } public class Inner { private int innerv; public Inner() { innerv = outerv + 1; } public void print() { System.out.println(innerv); }
} public static void main(String[] args) { Outer out = new Outer(); out.print(); Outer.Inner in = out.new Inner(); in.print(); } }
Jeg er skam fint med på hvordan de virker, blot ikke på hvordan jeg definerer globale variabler, som kan benyttes i alle classes, men som ikke skal refereres på den måde med j.i :)
public class Test2 { byte i; public static void main(String[] args) { new Test2(); } Test2() { Test j = new Test(); i=2; } class Test { public Test() { i=1; } } }
Nå nå, man er gnaven i dag ;) Det kunne f.eks. være fordi at det eneste der ikke virker, er netop det jeg ikke kan finde ud af og som jeg lige har stillet et spørgsmål omkring? ;)
Ah...jeg har lige opdaget, hvor jeg gik galt i byen henne :) Jeg havde min kode i main, i stedet for i Test2 constructoren, så nu hvor det er flyttet, er fejlene væk :) Smid et svar.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.