2016-05-10 5 views
0

In dem folgenden Code habe ich bereits erklärt, dass room = r; Thema = s; und Zeit = t; im benutzerdefinierten Konstruktor, also warum ist es notwendig, dies wieder in festgelegten Methoden zu tun, fragte mein Dozent speziell, dass wir Set-Methoden für den Raum Betreff und Zeit hinzufügen, aber es ist redundanter Code als wenn ich es auskommen, es funktioniert immer noch. Müssen Sie nur set-Methoden einbeziehen, wenn kein definierter Konstruktor verwendet wird? Was könnte der Vorteil sein, dass sie dort Methoden setzen?Was ist wichtig bei der Verwendung der set-Methode, wenn die Attribute bereits im Used Defined Constructor definiert wurden?

class LectureTest{ 
public static void main (String [] args){ 

Lecture l1 = new Lecture(140, "Comp", 5); 
l1.display(); 

Lecture l2 = new Lecture(280, "Sports", 3); 
l2.display(); 

Lecture l3 = new Lecture(101, "Business", 5); 
l3.display(); 

Lecture l4 = new Lecture(360, "Shooting", 4); 
l4.display(); 

Lecture l5 = new Lecture(); 
l5.display(); 

} 
}//end of LectureTest 

class Lecture{ 
private int room; 
private String subject; 
private int time; 

Lecture(int r, String s, int t){ 
    room = r; 
    subject = s; 
    time = t; 
    } 

Lecture(){} 

public void setroomNumber(int r){ 
    room = r; 
} 
public void setSubject(String s){ 
    subject = s; 
} 
public void setTime(int t){ 
    time = t; 
} 
public int getroomNumber(){ 
    return room; 
} 
public String getSubject(){ 
    return subject; 
} 
public int getTime(){ 
    return time; 
} 

    public void display(){ 
    System.out.printf("\n" + "Room Number: " + getroomNumber() + "\n" +  "Subject: " + getSubject() + "\n" + "Time " + getTime() + "\n"); 
    } 
} 
+0

testen wollen Sofern Ihr Typ unveränderlich sein soll, müssen Sie einen Weg um es zu mutieren. – azurefrog

Antwort

0

Der Konstruktor "initialisiert" Ihre Werte. Angenommen, Sie haben ...

public class Person { 
    public String name; 
    public int age; 

    public Person (String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public String toString() { 
     String str; 
     str = "My name is "+name+" and I am "+age+" years old!"; 
     return str; 
    } 
}//End of Person 


public class Main { 
    public static void main(String [] args) { 
     Person person = new Person("Bob", 15); 
     System.out.println(person.toString()); 
     System.out.println("Switching my name..."); 
     person.setName("Joe"); 
     System.out.println(person.toString()); 
    } 
}//End of main 

Sie sehen den Unterschied? Sie sollten den Konstruktor verwenden, wenn Sie eine neue Instanz des Objekts erstellen möchten. Auf diese Weise können Sie alle Felder des Objekts gleichzeitig setzen und müssen nicht 490832490 Setter aufrufen (in diesem Fall eins für Name und eins für Alter ...). Sie können dann den Setter-Ansatz verwenden, wenn Sie den Wert eines Felds VOR dem Erstellen des Objekts ändern möchten.

I DID auf diesem Forum alles so könnte ich SYNTAX FEHLER SO HABEN ... VORSICHTIG NICHT EIN IDE WENN SIE ES

+0

schlechte Praxis von mir ... sollte "private" statt "öffentlich" für die Felder verwendet haben –

0

Die Methoden set machen Ihr Objekt veränderbar. Wenn Sie die Methoden set nicht haben und Ihre Variablen private sind, wird die Object unveränderlich sein. Sie können die Werte nach dem Erstellen nicht ändern ... Wenn sich die Werte ändern müssen, müssen Sie newObject erstellen.

0

"Setter" können Sie private Attribute Ihres Objekts nach der Instanziierung ändern. Zum Beispiel:

Lecture l1 = new Lecture(140, "Comp", 5); 
//Since "room" is private you can't write l1.room = 4 
//and have to use the setter method instead: 
l1.setroomNumber(4); 
l1.display(); 

Sie sind auch sehr nützlich, wenn Sie etwas tun möchten, wenn sich ein Attribut ändert.

Nehmen wir an, Sie Beobachter verwenden, dann könnte man notifyObservers() oder setChanged() in Ihrem Setter-Methode aufrufen und nie über diese Methoden zu kümmern, nicht, wenn Ihr Attribut Änderungen genannt zu werden.

Verwandte Themen