Problem med getters and setters i Java

Permalänk
Medlem

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.

Permalänk
Medlem

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

phone = new PhoneNumber(....

Permalänk
Medlem
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
"

Permalänk
Medlem

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

Permalänk
Medlem
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.

Permalänk
Medlem

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

Permalänk
Medlem
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 ><

Permalänk
Medlem

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(....)"