Frage

Ist es notwendig, für Setter-Methoden ein Argument zu haben? Normalerweise Setter-Methoden akzeptieren ein Argument als Wert einer bestimmten Eigenschaft eines Objekts. Was passiert, wenn ich will zunächst die Gültigkeit prüfen, die auf einem anderen Argument abhängt, die ein boolean ist, wenn sie wahr ist, Validieren zuerst, sonst nur den Wert festgelegt.

Ich erhalte die Werte von Clients über FTP-Server. Manchmal enthalten diese Dateien Müll Werte. Zum Beispiel kann eine Telefonnummer wie # 3432838 # 9. Also, bevor ich den Wert gesetzt Ich brauche diese sinnlosen Zeichen zu entfernen. Kann ich es in den Setter-Methoden? Ist es ein brauchbares Konzept?

Dank einem Haufen im Voraus!

EDIT:

Ist das gilt:

public void setSomething(String strValue){ 
     if(checkValidity(strValue)){ 
         // set the value 
     } else { 
         // set the value to an empty string
     }  
  }
War es hilfreich?

Lösung

Es ist notwendig, speziell in dem Java Bean Rahmenmodell, aber es ist nicht zwingend im Allgemeinen.

können Sie haben Setter ohne Argument, wenn sie auf „swith“ gemeint sind, einen Wert.

void setCheck()

könnte zum Beispiel gemeint sein setzen das „check“ Boolesche Attribut auf true gesetzt.

Auch wenn es keine „Setter“ in dem Java Bean Sinne des Wortes ist, können Sie Setter für andere Zwecke verwendet vorstellen.

Plus, gemäß § 7 der JavaBean Spezifikationen, eine Setter hat mehr als ein Argument , zum Beispiel für indizierte Eigenschaften (Eine indizierte Eigenschaft einen Wertebereich unterstützt. Jedes Mal, wenn die Eigenschaft gelesen oder geschrieben Sie nur einen Index angeben, um festzustellen, welche von Ihnen gewünschten Wert.)

void setter(int index, PropertyType value); // indexed setter
void setter(PropertyType values[]); // array setter

In Ihrem Fall ein gültiger Ansatz wäre, hinzufügen, ein diese Frage ):

  • Validierung separat erfasst von Getter oder Setter in einem Validierungsverfahren werden sollte. Auf diese Weise, wenn die Validierung über mehrere Komponenten wiederverwendet werden soll, ist es verfügbar.
  • Es ist besser, nicht schnell (daher mein Vorschlag Ausnahme von dem Setter hinzuzufügen).

Andere Tipps

Mit dem Java Bean-Spezifikation Setter ein Argument haben. Wenn Sie einen anderen hinzufügen, für welchen Gründen auch immer, nicht als Setter mehr.

Setter ist vollkommen gültig „aufzuräumen“ sein Argument, oder Ausnahme auslösen, wenn ungültig ist.

Warum nicht. Überprüfen und die Eingabe Validierung ist eine gute Variante in den Setter aufzunehmen. Die Frage ist hier, wenn Sie das Element Einstellung ohne Validierung zulassen möchten.

Möglicherweise müssen Sie die Standard-Form der Setter für einige Rahmen Sie (Nutzung als Bohne) verwenden. Aber wenn man auf diese Weise nicht eingeschränkt sind, können Sie dies versuchen.

Sie können auch behauptet, verwenden in der Setter, wenn Sie einen anderen Code denken sollte die Validierung tun, aber falsche Werte sollten niemals eingestellt.

In dem Buch "Effective Java 2nd Edition" von Joshua Bloch (ISBN-13: 978-0-321-35668-0) said dass es am besten ist, den Erbauer als die Bohne Konvention für Objekte Kreationen verwenden
.

Zum Beispiel (Bohnenmuster):

NutritionFacts cocaCola = new NutritionFacts();
cocaCola.setServingSize(240);
cocaCola.setServings(8);
cocaCola.setCalories(100);
cocaCola.setSodium(35);
cocaCola.setCarbohydrate(27);

Verwendung mit builder Muster:

NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).
   calories(100).
   sodium(35).
   carbohydrate(27).
   build();

Die Umsetzung der Erbauer:

// Builder Pattern
public class NutritionFacts {
    private final int servingSize;
    private final int servings;
    private final int calories;
    private final int fat;
    private final int sodium;
    private final int carbohydrate;
    public static class Builder {
        // Required parameters
        private final int servingSize;
        private final int servings;
        // Optional parameters - initialized to default values
        private int calories = 0;
        private int fat = 0;
        private int carbohydrate = 0;
        private int sodium = 0;
        public Builder(int servingSize, int servings) {
            this.servingSize = servingSize;
            this.servings = servings;
        }
        public Builder calories(int val)
        { calories = val; return this; }
        public Builder fat(int val)
        { fat = val; return this; }
        public Builder carbohydrate(int val)
        { carbohydrate = val; return this; }
        public Builder sodium(int val)
        { sodium = val; return this; }
        public NutritionFacts build() {
            return new NutritionFacts(this);
        }
    }
    private NutritionFacts(Builder builder) {
        servingSize = builder.servingSize;
        servings = builder.servings;
        calories = builder.calories;
        fat = builder.fat;
        sodium = builder.sodium;
        carbohydrate = builder.carbohydrate;
    }
}

Wenn die ersten zwei Argumente erforderlich ar.
Zur Validierung können Sie frühe Validierung (in jeder <field>-Methode) oder faul Validierung (in der Build () -Methode) verwenden. Und das Format ist eine Art von Python Schlüssel-Wert-Initialisierung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top