سؤال

إذا اتصل شخص ما بطريقتي، فأنا أرغب في التعامل مع المشكلة بشكل دفاعي.عادةً ما أعود للتو null.

قررت تنفيذ أ try catch لكن يبدو أنني سأعود في النهاية null على أي حال.

هل أستطيع أن أكتب بلدي try catch بطريقة لا تعود في نهاية الطريقة null?

رمز العينة، باستخدام peek في فئة المكدس.

    public T peek()
    {
        T temp = null;

        try
        {
            temp = array[size]; 
        }

        catch(Exception e)
        {
        }

        return temp;
    }

عندما يتم استدعاؤها بمكدس فارغ.سوف يعود null.

لذلك ينبغي لي أن أزعج حتى مع try catch لهذا النوع من الحالات؟أنا أغري للقيام بذلك:

if(isEmpty())
   return null;

إذا لم تكن المكدس فارغة أريد إرجاع العنصر.إذا المكدس يكون فارغًا، فهل يمكنني تجنب إرجاع القيمة الفارغة إذا استخدمت ملف try-catch?

هل كانت مفيدة؟

المحلول

يجب أن تقوم الطريقة بإرجاع شيء ما أو طرح استثناء.إذا كان لديك نوع عام غير محدود، فلا يمكن استخدام أشياء مثل أنماط الكائنات الخالية، لذلك تعود الخيارات null, ، إرجاع شيء يحتوي على T يحب Optional<T>, أو رمي استثناء.

إذا كنت لا تحب سلامة null, ، يمكنك استخدام Optional, إما من Java 8 أو من مكتبة.تتمتع الاستثناءات المحددة بأمان مماثل ولكنها غير مناسبة هنا.

نصائح أخرى

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

public T peek() throws IndexOutOfBoundsException
{   
  return array[size]; 
}

و

try
{
  T top = thestack.peek();
  /* Do something with that object */
}
catch(IndexOutOfBoundsException e)
{
  /* Do something else */
}

من الصعب أن نتخيل array[size] رمي استثناء، ما لم يكن المصفوفة فارغة أو الحجم خارج طول المصفوفة.لذلك، يمكنك أن تفعل شيئا مثل هذا -

 if (array != null && array.length > size) {
   return array[size - 1]; // assuming your size starts at 1
 }
 return null; // need to return something, if not null you need an option type.

يحرر

أو باستخدام خيار موناد - وشيء من هذا القبيل،

 if (array != null && array.length > size) {
   return new Some<T>(array[size - 1]); // assuming your size starts at 1
 }
 return new None<T>(); 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top