Gå til innhold

Hvordan kommunisere med objekt fra annen metode?


Anbefalte innlegg

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
Videoannonse
Annonse
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 av Frank2004
Lenke til kommentar

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
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...