استثناء تاريخ Java Talling Trying Try Catch
-
22-09-2019 - |
سؤال
هل هناك نوع من الاستثناء في جافا لالتقاط كائن تاريخ غير صالح؟ أحاول استخدامه في الطريقة التالية ، لكنني لا أعرف نوع الاستثناء الذي يجب البحث عنه. هل هو ParseException.
public boolean setDate(Date date) {
this.date = date;
return true;
}
المحلول
في الطريقة التي تقدمها ، لا توجد طريقة لالتقاط استثناء ، لأنه لن يتم إلقاؤه بواسطة المهمة البسيطة. كل ما يمكنك فعله هو التغيير أدناه:
if(date == null) return false;
لكن حتى هذا ليس رشيقًا. قد ترغب في القيام بشيء ما this.date
أو رمي استثناء إذا كان هذا هو السلوك المطلوب.
ما تسعى إليه حقًا هو:
ParseException
- ألقاها أDateFormat
اعتراض عندما يحاولparse()
, ، الذي سيحدث قبل طريقة تعيينك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.