Setter-Methode Konvention

Hallo zusammen,

ich bin mir nicht ganz sicher wie ich mit einer Setter-Methode umgehen soll.

Über diese Zeilen soll ein jeweiliger Stringwert ermittel werden …


 public void ErgebnisTextErmitteln(getErgebnisZahl) {
     if(ergebnisZahl <= 1 & >= 0,5)
         System.out.println("Sehr positiv!");
     else if(ergebnisZahl < 0,5 & >= 0,3)
         System.out.println("Positiv!");
     else if(ergebnisZahl < 0,3 & >= 0,15)
         System.out.println("Relativ positiv!");
     else if(ergebnisZahl < 0,15 & >= 0)
         System.out.println("Neutral!");
     else if(ergebnisZahl < 0 & >= - 0,15)
         System.out.println("Neutral!");
     else if(ergebnisZahl < -0,15 & >= -0,3)
         System.out.println("Relativ negativ!");
     else if(ergebnisZahl < -0,3 & >= -0,5)
         System.out.println("Negativ!");
     else(ergebnisZahl < -0,5 & >= -1)
         System.out.println("Sehr negativ!");
         setErgebnisText = "Sehr negativ!";
         Management.ergebnisText = "Sehr negativ!";
         }

Wobei die Methode…


public static void setErgebnisText(String ergebnisText) {
        Management.ergebnisText = ergebnisText;
    }

… nachher das jeweilige String-Ergebnis liefern soll!

  • Kann ich das was oben in der public void ErgebnisTextErmitteln(getErgebnisZahl) einfach in die Setter-Methode schreiben?
  • Oder muss ich in der public void ErgebnisTextErmitteln(getErgebnisZahl) per

  else(ergebnisZahl < -0,5 & >= -1)
         setErgebnisText = "Sehr negativ!";
// oder
         Management.ergebnisText = "Sehr negativ!";

den Wert der Setter-Methode zuweisen?

Was ist von der Konvention her korrekt?

(Habe nach dem Lesen der Frage kurz hochgescrollt, um sicherzustellen, dass du wirklich von Java redest…)

Methodennamen fangen mit einem kleinbuchstaben an. Ein ‘setter’ sollte nicht viel machen, außer ein Field (eine Variable) zu setzen, bzw. ggf. vorher den übergebenen Wert auf Gültigkeit prüfen. Poste vielleicht nochmal eine kleine Dummy-Klasse, die zeigt, welche Fields und Methoden dir vorschweben, und wie du die verwenden wollen würdest…

[QUOTE=Tom3243254]Was ist von der Konvention her korrekt?[/QUOTE]Keine getter/Setter einzusetzen.

Gib den String als Ergebnis der Methode an den Aufrufer zurück:public String ErgebnisTextErmitteln(int getErgebnisZahl) { String ergebnisText; // ergebnisText=... return ergebnisText; }

bye
TT

[QUOTE=Tom3243254]Hallo zusammen,

ich bin mir nicht ganz sicher wie ich mit einer Setter-Methode umgehen soll.


public static void setErgebnisText(String ergebnisText) {
        Management.ergebnisText = "Sehr negativ!";

[/QUOTE]

Getter und Setter sind wichtige Elemente zur Kapselung und verbessern die Wartbarkeit des Programms. Zumindest Klassenübergreifend würde ich ohne guten Grund keinen direkten Zugriff auf globale Variablen zulassen. Wenn später irgendwas am Zugriff modifiziert werden muss (zusätzliche Prüfung, etc) muss sonst auch der Aufrufer immer mit geändert werden.

Im gegebenen Beispiel sieht es so aus, als würde innerhalb der Klasse mit setter gearbeitet werden, aber die String-Variable der Management-Klasse direkt modifiziert.

Also statt

 Management.ergebnisText = "Sehr negativ!";

lieber

 Management.setErgebnisText("Sehr negativ!");

Ich würde für den Text prinzipiell keine Setter verwenden, sondern ihn immer “live” ausrechnen lassen. Denn falls sich die Zahl mal ändert, musst du dich dann nicht darum kümmern, den entsprechenden Text überall neu zu setzen. Und wenn Zahl und Text eh so eng gekoppelt sind, wie wäre es mit einer Klasse “Ergebniss”:```public class Ergebniss{
private final int value;

public Ergebniss(int value){
this.value = value;
}

public int getValue(){return value;}

public String asText(){
String result;
if(0.5 >= value && value <= 1.0){result = “Sehr positiv!”;}
else if(0.3 >= value && value < 0.5){result = “Positiv!”;}

return result;

}
}```

Ein Setter an sich sollte prinzipiell so aussehenpublic void setX(T x){ this.x=x; }

EDIT: 1:0 für faetzminator.

[QUOTE=Natac]
Ein Setter an sich sollte immer nur so aussehen[/quote]
Wenn er immer so aussehen sollte, dann braeuchts keine Setter…
Natuerlich gibts Gruende, warum man Setter macht, u.a. wenn man noch interne Flags updaten muss oder irgendwelche Input Checks macht (z.B. IllegalArgumentException fuer int < 0).

[OT]Um die Liste fortzuführen:
…wenn man ein Observer-Pattern verwendet.
…wenn man eine bidirektionale Referenz konsistent halten möchte.[/OT]