Problem med getters and setters i Java

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

Problem med getters and setters i Java

Så jag har 3 klasser, Contact, PhoneNumber och Contact Test. När jag kör ConctacTest så gör den en instans av Contact som i sin tur ger vissa värden till konstruktorn i PhoneNumber. Den ska sedan returnera det till Contact som sedan returnerar det hela. Jag lägger upp allihopa här:

PhoneNumber:

public class PhoneNumber { private String home; private String work; private String mobile; public PhoneNumber(String home, String work, String mobile){ this.home = home; this.work = work; this.mobile = mobile; } public String getHome() { return home; } public void setHome(String home) { this.home = home; } public String getWork() { return work; } public void setWork(String work) { this.work = work; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String toString(){ return "Home: " + home + "Work: " + work + "Mobile: " + mobile; }

Contact:

public class Contact { private String name; private PhoneNumber phone; public Contact(String name, String home, String work, String mobile){ this.name=name; phone.setHome(home); phone.setWork(work); phone.setMobile(mobile); } public String getName(){ return name; } public String getHome(){ return phone.getHome(); } public String getWork(){ return phone.getWork(); } public String getMobile(){ return phone.getMobile(); } public String toString(){ return name + phone.toString(); } }

ContactTest

public class ContactTest { public static void main(String[] args) { Contact contact = new Contact("Eva Bok","040-123456","040-333333","0705223344"); System.out.println( "Namn: " + contact.getName() + "\n" + "Telefonnummer: " + contact.getHome() + ", " + contact.getWork() + ", " + contact.getMobile() ); System.out.println("--------------------------------"); System.out.println( contact.toString() ); } }

Problemet är alltså att jag inte får det att funka. När den kommer till phone.setHome(home); i konstruktorn i Contact så hittar den inte phone.setHome.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Registrerad
Feb 2013

Du måste instantiera phone innan du kan anropa metoder på den.

phone = new PhoneNumber(....

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
Skrivet av The-Architect:

Du måste instantiera phone innan du kan anropa metoder på den.

phone = new PhoneNumber(....

Jo, så tänkte jag också, men vet inte riktigt om jag får. Detta är min problembeskrivning:

"Skriv klassen Contact vilken ska representera en person i en telefonbok. Klassen innehåller två attribut, namnet på personen och ett PhoneNumber-objekt med personens olika telefonnummer.
• Konstruktorn ska ta emot fyra argument – namn, hemnummer, arbetsnummer och mobilnummer. Samtliga ska vara av typen String.
• toString-metoden ska returnera ett String-objekt på formen: Contact: Eva Bok Home: 0413-11111
Work: 040-123456 Mobile: 0735191919
"

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Registrerad
Jul 2011

Handlar inte om du får eller ej, utan du måste för annars har du inget objekt att sätta variablar till.

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
Skrivet av beejac:

Handlar inte om du får eller ej, utan du måste för annars har du inget objekt att sätta variablar till.

Jag har testat att göra: private PhoneNumber phone = new PhoneNumber();
Men jag är osäker vilka parametrar jag ska använda.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Registrerad
Feb 2013

Instantiera den i konstrukturn till contact:
this.phone = new PhoneNumber(...)

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
Skrivet av The-Architect:

Instantiera den i konstrukturn till contact:
this.phone = new PhoneNumber(...)

Okej, nu ser det ut såhär i min konstruktor:

public Contact(String name, String home, String work, String mobile){
PhoneNumber phone = new PhoneNumber(home, work, mobile);
this.name=name;
phone.setHome(home);
phone.setWork(work);
phone.setMobile(mobile);
}

Edit: Såg att du hade skrivit this. Jag ändrade och det funkade! Förstår dock knappt hur ><

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Registrerad
Feb 2013

this refererar till objektet självt, I konstruktorn för contact är det ditt Contact-objekt. din Contact har i sin tur ett fält av typen PhoneNumber vid namn "phone". så this.phone refererar till det fältet i Contact (lika som fältet name)

När du i konstruktorn till Contact skriver detta:
PhoneNumber phone = new PhoneNumber(home, work, mobile);
så skapar du upp ett helt nytt objekt av typen PhoneNumber, som du sedan sätter lite värden på och sedan inte gör något annat med.

Om vi ska vara petiga så behöver du ej heller köra de tre metoderna phone.set.... i konstruktorn till Contact, de värdena sätts redan i konstruktorn för PhoneNumber när du anropar "new PhoneNumber(....)"