سؤال

هل هناك نوع من الاستثناء في جافا لالتقاط كائن تاريخ غير صالح؟ أحاول استخدامه في الطريقة التالية ، لكنني لا أعرف نوع الاستثناء الذي يجب البحث عنه. هل هو ParseException.

public boolean setDate(Date date) {
        this.date = date;                
        return true;
    }
هل كانت مفيدة؟

المحلول

في الطريقة التي تقدمها ، لا توجد طريقة لالتقاط استثناء ، لأنه لن يتم إلقاؤه بواسطة المهمة البسيطة. كل ما يمكنك فعله هو التغيير أدناه:

if(date == null) return false;

لكن حتى هذا ليس رشيقًا. قد ترغب في القيام بشيء ما this.date أو رمي استثناء إذا كان هذا هو السلوك المطلوب.

ما تسعى إليه حقًا هو:

  1. ParseException - ألقاها أ DateFormat اعتراض عندما يحاول parse(), ، الذي سيحدث قبل طريقة تعيينك
  2. IllegalArgumentException - ألقاها أ SimpleDateFormat مُنشئ ، مرة أخرى سيحدث قبل طريقة المحددة. يشير إلى أنك قدمت سلسلة تنسيق غير صالحة.

كنت تريد التقاط واحدة من هؤلاء (ربما #1). لكن يجب أن يحدث قبل استدعاء الطريقة. بمجرد حصولك على ملف Date كائن ، هو إما null أو صالح.

نصائح أخرى

قد لا يكون هذا مرتبطًا بالسؤال الأصلي. ولكن يجب أن تلاحظ اسم الطريقة ، وهو setDate(). هل تعتقد أنه يبدو أنه سيعيد شيئًا؟ أو إذا كان ذلك قد ، فهل تعتقد أنها فكرة جيدة لإعادة أ boolean هناك؟ IMO ، افعل شيئًا كهذا ،

public void setDate(Date date) {
    this.date = date;                
}

public boolean isDateNull() { // or something
    return this.date == null;                
}

في هذه الطريقة ، لا داعي للقلق بشأن استثناء. تم إنشاء التاريخ بالفعل بحلول الوقت الذي تدخل فيه في هذه الطريقة. إذا كنت تقوم بتحليل موعد ، فسيكون ذلك خارج هذا الرمز. أفضل ما يمكنك فعله هو التأكد من أن التاريخ ليس فارغًا.

يعتمد ذلك على ما تعنيه بتاريخ غير صالح. هل تقصد أن تعطينا توقيع طريقة تبدو مثل هذا؟

public void setDate(String date) throws ParseException {
   this.date = SomeDateFormat.getInstance().format(date);
}

خلاف ذلك ، كما ذكر الآخرون أن الفعل البسيط المتمثل في تعيين كائن تاريخ Java إلى حقل لا ينبغي أن يكون استثنائيًا لأنه إما مثيل للتاريخ بالفعل ، أو NULL.

إذا كنت تحاول فقط تحليل سلسلة في java.util.date ، انظر إلى صيغة التاريخ, أو FastDateFormat (Apache أو Thread Safe) أو Joda Time.

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