Garathor Skrevet 26. oktober 2004 Del Skrevet 26. oktober 2004 Hvordan kan jeg opprette et objekt i en metode, og så referere til dette objektet i en annen metode? For eksempel: En klasse som definerer objekttypen: class Objektklasse { private int data1; private double data2; private String data3; public Objektklasse() { data1 = 97; data2 = 76.82; data3 = "Ja"; } } En main-metode som oppretter et objekt av denne typen, og som utfører et metodekall til en annen metode: class Test { public static void main(String[] args) { Objektklasse tulleObjekt = new Objektklasse(); AndreMetoder.brukObjekt(); } } Den andre metoden, som prøver å skrive ut data fra objektet. Men når jeg prøver å kompilere denne, så får jeg feilmeldingen "cannot resolve symbol variable tulleObjekt". class AndreMetoder { public static void brukObjekt() { System.out.println(tulleObjekt.data1); System.out.println(tulleObjekt.data2); System.out.println(tulleObjekt.data3); } } Lenke til kommentar
Vial Skrevet 26. oktober 2004 Del Skrevet 26. oktober 2004 Du har deklarert data1, data2 og data3 som private. For å bruke de må de enten være public eller så må du oprette en funksjon for å hente ut og sette variablene Lenke til kommentar
Garathor Skrevet 26. oktober 2004 Forfatter Del Skrevet 26. oktober 2004 Jeg får fremdeles feilmeldingen selv om jeg setter instansevariablene i objektektklassen til public. Hvordan kan metoden brukObjekt() vite at det eksisterer et objekt som heter tulleObjekt? Lenke til kommentar
Frank2004 Skrevet 26. oktober 2004 Del Skrevet 26. oktober 2004 (endret) Hvordan kan jeg opprette et objekt i en metode, og så referere til dette objektet i en annen metode? Du må sørge for at denne andre metoden har en referanse til objektet. En måte å gjøre dette på kan f.eks. være å sende denne med som et parameter til metoden. En main-metode som oppretter et objekt av denne typen, og som utfører et metodekall til en annen metode: class Test { public static void main(String[] args) { Objektklasse tulleObjekt = new Objektklasse(); AndreMetoder.brukObjekt([i]tulleObjekt[/i]); } } Den andre metoden, som prøver å skrive ut data fra objektet. Men når jeg prøver å kompilere denne, så får jeg feilmeldingen "cannot resolve symbol variable tulleObjekt". class AndreMetoder { public static void brukObjekt([i]Objektklasse tulleObjekt[/i]) { System.out.println(tulleObjekt.data1); System.out.println(tulleObjekt.data2); System.out.println(tulleObjekt.data3); } } Som over. Det er ikke særlig bra design å gjøre instansvariabler 'public', så du bør nok gå for Vials forslag om å bruke en metode for å hente ut innholdet av disse. Om ikke annet enn for å unngå dårlige vaner. Vanlige måten å deklarere en slik accessor på er "public VariabelType getVariabelNavn()". Du kan f.eks. definere følgende metode i ObjektKlasse: public int getData1() { return data1; } Endret 26. oktober 2004 av Frank2004 Lenke til kommentar
Garathor Skrevet 26. oktober 2004 Forfatter Del Skrevet 26. oktober 2004 Takk for hjelpen Er det aldri akseptabelt å sette instansevariablene som public? I denne sammenhengen er det snakk om objekt med veldig mange instansevariabler, og det virker mye lettere å lese verdiene rett fra objektet enn å bruke metoder for å returnere de (det er kun snakk om lesing fra objektene, ikke skriving til). Lenke til kommentar
buskmann Skrevet 26. oktober 2004 Del Skrevet 26. oktober 2004 Er det aldri akseptabelt å sette instansevariablene som public? Det er like akseptabelt som å bruke to plasser på en parkeringsplass. Det går helt fint å bruke to plasser når parkeringsplassen er tom, og det går helt fint å sette variabler til "public" når du har et lite og oversiktelig program. På den annen side er det ufint å bruke to plasser når det er fullt av biler, og å aksessere variabler direkte er en ekstra og unødvendig feilkilde når du får mer å holde orden på. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå