هل من الضروري بالنسبة أساليب اضع أن يكون واحدا الحجة ؟

StackOverflow https://stackoverflow.com/questions/305239

  •  08-07-2019
  •  | 
  •  

سؤال

هل من الضروري بالنسبة أساليب اضع أن يكون واحدا الحجة ؟ عادة أساليب اضع تقبل حجة واحدة بقدر قيمة ممتلكات معينة من كائن.ما إذا كنت ترغب في اختبار أول من صحة الذي يعتمد على حجة أخرى وهي منطقية ، إذا كان هذا صحيحا, صحة الأولى, آخر فقط تعيين قيمة.

أنا على الحصول على قيم من العملاء من خلال ftp server.في بعض الأحيان هذه الملفات تحتوي على القيم القمامة.على سبيل المثال رقم الهاتف مثل #3432838#9.حتى قبل تعيين قيمة احتاج إلى إزالة هذه القمامة الشخصيات.يمكن أن أفعل ذلك في واضع الأساليب ؟ هو صالح النهج ؟

شكرا جزيلا مقدما!

تحرير:

تصح هذه:

public void setSomething(String strValue){ 
     if(checkValidity(strValue)){ 
         // set the value 
     } else { 
         // set the value to an empty string
     }  
  }
هل كانت مفيدة؟

المحلول

فمن الضروري على وجه التحديد في الفول جافا إطار النموذج ، ولكنها ليست إلزامية في العام.

هل يمكن أن يكون واضع مع أي حجة عند أنها تهدف إلى "سويث" قيمة.

void setCheck()

يمكن على سبيل المثال أن تكون يعني أن مجموعة "التحقق" منطقية السمة الحقيقية.

حتى لو أنها ليست "واضع" في الفول جافا من معنى ، يمكنك أن تتخيل اضع استخدامها لأغراض أخرى.

بالاضافة الى ذلك ، ووفقا للمادة 7 من التخطيط الاستراتيجي المشترك javabean المواصفات ، واضع يمكن أن يكون أكثر من حجة واحدة, على سبيل المثال للحصول على فهرستها من خصائص (مفهرس الملكية يدعم مجموعة من القيم.كلما العقار قراءة أو كتابة أو يمكنك فقط تحديد مؤشر لتحديد القيمة التي تريدها.)

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

في حالة صالحة نهج إضافة وقت التشغيل استثناء إلى توقيع لدينا وظيفة.
بهذه الطريقة أنت لا تضع أي لا لزوم لها تجميع-الاستثناء الوقت التحقق من جميع الفئات الأخرى التي هي بالفعل استدعاء واضع.

أو يمكنك أن تنظر في الممتلكات الخاصة بك كما قيود الملكية وإضافة غير وقت استثناء.

تقييد الملكية اضع الأساليب اللازمة لدعم PropertyVetoException.هذه الوثائق إلى المستخدمين من قيود الملكية التي حاولت قد تكون التحديثات اعترض.لذا بسيطة مقيدة الملكية قد تبدو مثل:

PropertyType getFoo();
void setFoo(PropertyType value) throws PropertyVetoException;

والذي يسمح VetoableChangeListener أن تضاف إذا لزم الأمر.


فيما يتعلق مقتطف هو "صالح" ولكن قد لا يكون الأمثل لأنه (كما قال في هذا السؤال):

  • التحقق من أن يتم القبض على حدة من حاصل أو واضعي في أسلوب التحقق من الصحة.بهذه الطريقة إذا كان التحقق من صحة يحتاج إلى استخدامها عبر العديد من المكونات المتاحة.
  • فمن الأفضل أن تفشل بسرعة (ومن هنا جاء اقتراحي لإضافة استثناء واضع).

نصائح أخرى

عن طريق جافا فول مواصفات اضع يكون حجة واحدة.إذا قمت بإضافة واحد آخر لأي سبب من الأسباب فإنه لا يعتبر واضع بعد الآن.

اضع هي صحيحة تماما "تنظيف" حجتها ، أو رمي استثناء إذا كان غير صالح.

لماذا لا.التحقق من صحة المدخلات جيدة البديل أن تدرج في واضع.والسؤال هنا هو إذا كنت تريد أن تسمح الإعداد الأعضاء دون التحقق من الصحة.

ربما تحتاج القياسية على شكل اضع لبعض إطار استخدام (الاستخدام مثل الفول).ولكن إذا كنت لا يقتصر في هذه الطريقة يمكنك أن تجرب هذا.

هل يمكن أيضا استخدام يؤكد في واضع ، إذا كنت تعتقد رمز آخر ينبغي القيام به التحقق من الصحة ولكن قيم خاطئة لا ينبغي أبدا تعيين.

في كتاب "فعالة جافا 2nd Edition" من قبل يشوع بلوخ (ISBN-13:978-0-321-35668-0) يقول: أنه من الأفضل استخدام منشئ نمط من الفول اتفاقية الكائنات الإبداعات.

على سبيل المثال (فول نمط):

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

استخدام منشئ نمط:

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

تنفيذ باني نمط:

// 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;
    }
}

عند أول اثنين من الحجج ع المطلوبة.
المصادقة يمكنك استخدام التحقق المبكرة (في كل <field> طريقة) أو كسول التحقق من صحة (في بناء (طريقة)).وشكل هو نوع من الثعبان قيمة المفتاح التهيئة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top